It just says where it is inside the class itself, not what the value of the vtable pointer is:
0x00006628: TAG_structure_type [112] * AT_containing_type( {0x0000000000006628} ) AT_name( "base_type" ) AT_byte_size( 0x08 ) AT_decl_file( "/private/tmp/main.cpp" ) AT_decl_line( 6 ) 0x00006634: TAG_member [4] AT_name( "_vptr$base_type" ) AT_type( {0x0000000000004a41} ( __vtbl_ptr_type* ) ) AT_data_member_location( 0x00 ) AT_artificial( true ) Just says “the vtable is at offset zero inside the class”. Not helpful for reading any vtable pointer and trying to figure out which class it belongs to. Greg > On Feb 6, 2017, at 2:25 PM, Zachary Turner <ztur...@google.com> wrote: > > Doesn't the DWARF have a record for the VTable itself? I know PDB does, you > can look up the class name through the VTable debug info record rather than > trying to demangle the name. > > On Mon, Feb 6, 2017 at 2:21 PM Greg Clayton via lldb-dev > <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: > Yeah, when doing dynamic type resolution, we look at the first pointer inside > the pointer and see if it resolves to a virtual table symbol. If it does, we > extract the class name from the demangled symbol name and try to look up. GDB > does the same thing. All debuggers do AFAIK. > > If the DWARF specified the vtable address in the DWARF on the class > definition this would help, but without that the only thing we can really do > is to try and figure out the class and look it up by name. Also, even if this > is added to future DWARF, it doesn’t fix the problem that we have many > compilers that don’t have the info so we would still need to do what we do. > > If anyone has any better ideas I am all ears? > > Greg > >> On Feb 6, 2017, at 11:48 AM, Robinson, Paul <paul.robin...@sony.com >> <mailto:paul.robin...@sony.com>> wrote: >> >> So is LLDB expecting the name in the DWARF info to match the demangled name >> of the vtable pointer? The DWARF spec does not really specify what the name >> of a template instantiation should be, and in particular does not *want* to >> specify whether it matches any given demangler's opinion of the name. >> --paulr >> <> >> From: lldb-dev [mailto:lldb-dev-boun...@lists.llvm.org >> <mailto:lldb-dev-boun...@lists.llvm.org>] On Behalf Of Greg Clayton via >> lldb-dev >> Sent: Monday, February 06, 2017 11:08 AM >> To: Greg Clayton >> Cc: lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >> Subject: Re: [lldb-dev] RTTI does not work stable in LLDB. >> >> So I found the problem. This is a compiler bug. The DWARF for this type >> looks like: >> >> 0x000065da: TAG_structure_type [112] * >> AT_containing_type( {0x0000000000006628} ) >> AT_name( "derived0<int, int, 1024>" ) >> AT_byte_size( 0x08 ) >> AT_decl_file( "/private/tmp/main.cpp" ) >> AT_decl_line( 9 ) >> >> >> But all of the type info in the symbol table has has the type named as >> "derived0<int, int, 1024u>”. Note the extra “u” that follows 1024. This >> stops LLDB from being able to lookup the type correctly so we can show the >> dynamic type. In LLDB we check the first pointer inside of a class to see if >> it is a symbol whose name is “vtable for TYPENAME”. If it is, we lookup the >> type “TYPENAME” to find it. In this case we try to lookup "derived0<int, >> int, 1024u>” and we fail since the DWARF has it as "derived0<int, int, >> 1024>”. >> >> I have filed a radar on the compiler here at Apple for the fix. >> >> Greg >> >> >> >> On Feb 6, 2017, at 10:22 AM, Greg Clayton via lldb-dev >> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: >> >> I am looking at this now. I will let you know what I find. >> >> Greg >> >> On Feb 6, 2017, at 10:00 AM, Roman Popov <ripo...@gmail.com >> <mailto:ripo...@gmail.com>> wrote: >> >> Yes, that was my thought. >> >> FYI, checked in GDB: it's working correctly on this testcase showing correct >> dynamic type in both cases. >> >> 2017-02-06 9:48 GMT-08:00 Greg Clayton <gclay...@apple.com >> <mailto:gclay...@apple.com>>: >> You have found a bug. It should be reporting this correctly but it isn’t. I >> verified it fails on MacOSX. >> >> Greg Clayton >> >> On Feb 5, 2017, at 1:19 PM, Roman Popov via lldb-dev >> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: >> >> Hello, >> I'm observing very strange LLDB behavior: it does not always shows a correct >> dynamic type when I ask for. >> >> Originally I was working with LLDB 3.9, but it looks like trunk version >> behaves the same strange way. >> >> I was able to capture this behavior in a small code snippet: >> >> #include <iostream> >> #include <typeinfo> >> >> using namespace std; >> >> struct base_type { virtual ~base_type(){} }; >> >> template <class T1, class T2, unsigned SIZE> >> struct derived0 : base_type {}; >> >> template <class T1, class T2> >> struct derived1 : base_type {}; >> >> int main(int argc, char ** argv) { >> >> base_type * bptr0 = new derived0<int, int, 1024>(); >> base_type * bptr1 = new derived1<int, int >(); >> >> cout << typeid(*bptr0).name() << endl; >> cout << typeid(*bptr1).name() << endl; >> >> return 0; >> } >> >> >> lldb --version >> lldb version 5.0.0 (http://llvm.org/svn/llvm-project/lldb/trunk >> <http://llvm.org/svn/llvm-project/lldb/trunk> revision 293398) >> clang revision 293398 >> llvm revision 293398 >> >> >> Testing in LLDB: >> (lldb) break set --file main.cpp --line 22 >> >> (lldb) expression -d no-run -- bptr1 >> (derived1<int, int> *) $2 = 0x0000000000614c40 >> >> (lldb) expression -d no-run -- bptr0 >> (base_type *) $3 = 0x0000000000614c20 >> >> >> Can someone explain me why for bptr0 I dont get a derived0<int, int, 1024> >> * as I expected? >> >> >> Thanks, >> Roman >> _______________________________________________ >> lldb-dev mailing list >> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >> <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev> >> >> >> >> _______________________________________________ >> lldb-dev mailing list >> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >> <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev> > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev > <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev>
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev