[lldb-dev] Issue: print std unique pointer

Alexandre Yukio Yamashita via lldb-dev lldb-dev at lists.llvm.org
Fri Mar 2 07:34:09 PST 2018


Implemented a fix in: https://reviews.llvm.org/D44015
Could you please review it?


Em 28/02/2018 16:07, Pavel Labath escreveu:
> I think this is the interesting part: std::__uniq_ptr_impl<int,
> std::default_delete<int> >
>
> There is no such type in the example I posted. It looks like the
> implementation of std::unique_ptr changed, and they added an extra
> member object. This tells me the fix should be in the data formatter
> for std::unique_ptr and not std::tuple (which makes sense, because
> your std::tuple tests are still passing (?)). We should detect the new
> layout and format based on that. It would also be good to know in
> which libstdc++ version this changed, so we can leave a note to future
> selves about when can this be cleaned up.
>
> On 28 February 2018 at 05:25, Alexandre Yukio Yamashita
> <alexandre.yamashita at eldorado.org.br> wrote:
>> All the test cases in TestDataFormatterStdUniquePtr were failing.
>> My std::unique_ptr layout is:
>>
>>      (std::unique_ptr<int, std::default_delete<int> >) iup = {
>>        (std::__uniq_ptr_impl<int, std::default_delete<int> >) _M_t = {
>>          (std::tuple<int *, std::default_delete<int> >) _M_t = {
>>            (std::_Tuple_impl<0, int *, std::default_delete<int> >)
>> std::_Tuple_impl<0, int *, std::default_delete<int> > = {
>>              (std::_Head_base<0, int *, false>) std::_Head_base<0, int *,
>> false> = {
>>                (int *) _M_head_impl = 0x0000000010041c20
>>              }
>>            }
>>          }
>>        }
>>      }
>>
>> It is showing "std::tuple<int *, std::default_delete<int> >) _M_t"
>> instead of "std::_Tuple_impl<0, int *, std::default_delete<int> >".
>>
>>
>> Em 27/02/2018 19:34, Greg Clayton escreveu:
>>
>> Then the question becomes how can we identify the STL that is being used
>> correctly so we can do the right thing. I worry that if std::unique_ptr
>> isn't working that many many other STL things won't work as well. We are
>> tuned for a specific STL
>>
>> On Feb 27, 2018, at 2:12 PM, Pavel Labath via lldb-dev
>> <lldb-dev at lists.llvm.org> wrote:
>>
>> This probably isn't arch-dependent. More likely you just have a
>> different version of libstdc++. Can you share how the std::unique_ptr
>> layout looks like for you. This is how my std::unique_ptr looks like
>> (from libstdc++.so.6.0.22):
>>
>> (lldb) fr var X -R -T
>> (std::unique_ptr<int, std::default_delete<int> >) X = {
>>   (std::unique_ptr<int, std::default_delete<int> >::__tuple_type) _M_t = {
>>     (std::_Tuple_impl<0, int *, std::default_delete<int> >)
>> std::_Tuple_impl<0, int *, std::default_delete<int> > = {
>>       (std::_Head_base<0, int *, false>) std::_Head_base<0, int *, false> = {
>>         (int *) _M_head_impl = 0x0000555555768c20
>>       }
>>     }
>>   }
>> }
>>
>> On 27 February 2018 at 12:26, Alexandre Yukio Yamashita via lldb-dev
>> <lldb-dev at lists.llvm.org> wrote:
>>
>> Hi,
>>
>> LLDB is printing a empty value for unique pointers in PowerPC.
>> And I am investigating a solution for this problem.
>>
>> The problem occurs because the ptr_obj variable has a empty value in
>> Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp:73.
>>
>> I could solve it, changing this line
>> Plugins/Language/CPlusPlus/LibStdcppTuple.cpp:68
>> from:
>>      if (name_str.startswith("std::_Tuple_impl<")) {
>> to:
>>      if (name_str.startswith("std::_Tuple_impl<") ||
>> name_str.startswith("_M_t") ) {
>>
>> After this change, the test TestDataFormatterStdUniquePtr pass with success.
>> And the unique pointers are displayed correctly.
>>
>> Is there a better solution for that?
>>
>> Thanks.
>> Alexandre.
>>
>>
>> --
>> Alexandre Yukio Yamashita (DSB)
>> Instituto de Pesquisas Eldorado
>> www.eldorado.org.br
>> +55 19 3757 3201 / +55 19 9 8336 5553
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>
>>
>> --
>> Alexandre Yukio Yamashita (DSB)
>> Instituto de Pesquisas Eldorado
>> www.eldorado.org.br
>> +55 19 3757 3201 / +55 19 9 8336 5553

-- 
Alexandre Yukio Yamashita (DSB)
Instituto de Pesquisas Eldorado
www.eldorado.org.br
+55 19 3757 3201 / +55 19 9 8336 5553


More information about the lldb-dev mailing list