[lldb-dev] Issue: print std unique pointer

Alexandre Yukio Yamashita via lldb-dev lldb-dev at lists.llvm.org
Wed Feb 28 05:25:16 PST 2018


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><mailto: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><mailto: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<http://www.eldorado.org.br>
+55 19 3757 3201 / +55 19 9 8336 5553
_______________________________________________
lldb-dev mailing list
lldb-dev at lists.llvm.org<mailto: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<mailto: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<http://www.eldorado.org.br>
+55 19 3757 3201 / +55 19 9 8336 5553
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20180228/b26ee6b0/attachment-0001.html>


More information about the lldb-dev mailing list