Skip to content
  • Greg Clayton's avatar
    Added support for inlined stack frames being represented as real stack frames · 1b72fcb7
    Greg Clayton authored
    which is now on by default. Frames are gotten from the unwinder as concrete
    frames, then if inline frames are to be shown, extra information to track
    and reconstruct these frames is cached with each Thread and exanded as needed.
    
    I added an inline height as part of the lldb_private::StackID class, the class
    that helps us uniquely identify stack frames. This allows for two frames to
    shared the same call frame address, yet differ only in inline height.
    
    Fixed setting breakpoint by address to not require addresses to resolve.
    
    A quick example:
    
    % cat main.cpp
    
    % ./build/Debug/lldb test/stl/a.out 
    Current executable set to 'test/stl/a.out' (x86_64).
    (lldb) breakpoint set --address 0x0000000100000d31
    Breakpoint created: 1: address = 0x0000000100000d31, locations = 1
    (lldb) r
    Launching 'a.out'  (x86_64)
    (lldb) Process 38031 Stopped
    * thread #1: tid = 0x2e03, pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_data() const at /usr/include/c++/4.2.1/bits/basic_string.h:280, stop reason = breakpoint 1.1, queue = com.apple.main-thread
     277   	
     278   	      _CharT*
     279   	      _M_data() const
     280 ->	      { return  _M_dataplus._M_p; }
     281   	
     282   	      _CharT*
     283   	      _M_data(_CharT* __p)
    (lldb) bt
    thread #1: tid = 0x2e03, stop reason = breakpoint 1.1, queue = com.apple.main-thread
      frame #0: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_data() const at /usr/include/c++/4.2.1/bits/basic_string.h:280
      frame #1: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_rep() const at /usr/include/c++/4.2.1/bits/basic_string.h:288
      frame #2: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::size() const at /usr/include/c++/4.2.1/bits/basic_string.h:606
      frame #3: pc = 0x0000000100000d31, where = a.out`main [inlined] operator<< <char, std::char_traits<char>, std::allocator<char> > at /usr/include/c++/4.2.1/bits/basic_string.h:2414
      frame #4: pc = 0x0000000100000d31, where = a.out`main + 33 at /Volumes/work/gclayton/Documents/src/lldb/test/stl/main.cpp:14
      frame #5: pc = 0x0000000100000d08, where = a.out`start + 52
    
    Each inline frame contains only the variables that they contain and each inlined
    stack frame is treated as a single entity.
    
    llvm-svn: 111877
    1b72fcb7
Loading