<div dir="ltr">Thanks Greg,<div><br></div><div>So here is another case when LLDB fails to resolve dynamic type.  Compiled with G++5.4 on Ubuntu 16.04.</div><div><br></div><div>Here I want to get dynamic type for some variable apb_memories</div><div><br></div><div><div>(lldb) expr -d no-run -- apb_memories<br></div><div>(sc_core::sc_object *) $3 = 0x0000000000cb6aa8</div><div><br></div><div><br></div><div>(lldb) memory read --format address apb_memories</div><div>0x00cb6aa8: 0x00000000004e33f8 test_design`vtable for demo::apb_memory<sc_dt::sc_<wbr>uint<32>, sc_dt::sc_uint<32>, 1024u> + 24</div><div>...</div><div><br></div><div>(lldb) image lookup -t "demo::apb_memory<sc_dt::sc_<wbr>uint<32>, sc_dt::sc_uint<32>, 1024u>"<br></div><div><br></div><div>(lldb) image lookup -t "apb_memory<sc_dt::sc_uint<32><wbr>, sc_dt::sc_uint<32>, 1024u>"</div><div>Best match found in ...</div><div>id = {0x0002cc4b}, name = "apb_memory<sc_dt::sc_uint<32><wbr>, sc_dt::sc_uint<32>, 1024u>", qualified = "demo::apb_memory<sc_dt::sc_<wbr>uint<32>, sc_dt::sc_uint<32>, 1024>", byte-size = 27384, decl = apb_memory.h:15, compiler_type = "class apb_memory : public sc_core::sc_module, public demo::clk_rstn_sif, public demo::apb_if<sc_dt::sc_uint<<wbr>32>, sc_dt::sc_uint<32> > {</div><div>..}"<br></div></div><div><br></div><div><br></div><div>Looks like in that case the problem is with namespace specifier. G++ did not put it into debug info.</div><div><br></div><div>I hope it will be fixed soon, at least for Clang+LLDB combo. Probably you need to write a unit-test that will check typeinfo against debug info for various scenarios. </div><div><br></div><div><br></div><div><div class="gmail_extra"><br><div class="gmail_quote">2017-02-09 4:04 GMT+03:00 Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_-5178498351258891521gmail-"><br>
> On Feb 6, 2017, at 5:58 PM, Roman Popov <<a href="mailto:ripopov@gmail.com" target="_blank">ripopov@gmail.com</a>> wrote:<br>
><br>
> Hello,<br>
> I just found out that sometimes I don't get correct dynamic type in LLDB even if I compile with g++.  How can I get typeinfo/vtable dump from LLDB to check if it is still the same name matching issue?<br>
<br>
<br>
</span>Stop where dynamic typing fails, and take the pointer that is failing to be properly typed and do:<br>
<br>
(lldb) memory read --format address my_ptr<br>
<br>
Then look at the first entry that is in the output and it should be "vtable for " and take all the characters that follow this and are before the " + XXX" and check to see if LLDB knows about this type.<br>
<br>
If we use your previous source:<br>
<span class="m_-5178498351258891521gmail-"><br>
#include <iostream><br>
#include <typeinfo><br>
<br>
using namespace std;<br>
<br>
struct base_type {  virtual ~base_type(){} };<br>
<br>
template <class T1, class T2, unsigned SIZE><br>
struct derived0 : base_type {};<br>
<br>
template <class T1, class T2><br>
struct derived1 : base_type {};<br>
<br>
int main(int argc, char ** argv) {<br>
<br>
    base_type * bptr0 = new derived0<int, int, 1024>();<br>
    base_type * bptr1 = new derived1<int, int >();<br>
<br>
    cout << typeid(*bptr0).name() << endl;<br>
    cout << typeid(*bptr1).name() << endl;<br>
<br>
    return 0;<br>
}<br>
<br>
<br>
<br>
<br>
</span>If we compile this into "a.out":<br>
<br>
% lldb a.out<br>
(lldb) b /return 0/<br>
(lldb) r<br>
(lldb) memory read --format address bptr0<br>
0x1001002f0: 0x0000000100002120 vtable for derived0<int, int, 1024u> + 16<br>
....<br>
<br>
We now take all text past the "vtable for " and before the " + 16" and lookup the type by name:<br>
<br>
(lldb) image lookup -t "derived0<int, int, 1024u>"<br>
<br>
Note this doesn't work, but if we remove the 'u' from 1024 it does work:<br>
<br>
(lldb) image lookup -t "derived0<int, int, 1024>"<br>
Best match found in /tmp/a.out:<br>
id = {0x000065da}, name = "derived0<int, int, 1024>", byte-size = 8, decl = main.cpp:9, compiler_type = "class derived0 : public base_type {<br>
}"<br>
<br>
<br>
<br>
</blockquote></div><br></div></div></div>