[lldb-dev] Loading debug symbols (C++, Ubuntu 14.04)
Pavel Labath via lldb-dev
lldb-dev at lists.llvm.org
Mon May 9 02:23:28 PDT 2016
You can also use SBCommandInterpreter::HandleCommand, which gives you
a bit more control over what happens.
good luck with your thesis.
On 9 May 2016 at 10:00, Stefan Kratochwil <kratochwil at teco.edu> wrote:
> Hi Pavel,
> thanks for your quick reply. I am currently using a release build, so it may
> take a moment until I can step through there. I'll report back as soon as
> possible (my masters thesis somehow depends on that ;) ).
> I was just about to implement an addon for the API tonight, when I found
> SBDebugger::HandleCommand("target symbols add ..."). Yeah, it's a little
> weird way of using an API, and it's a one way command with stdout as reply
> channel, but it works ^^
> On 05/09/2016 10:22 AM, Pavel Labath wrote:
>> Hi Stefan,
>> what you are describing should work out of the box, so the fact that
>> you are having to add the symbols manually is a bug. I haven't tried
>> it with the apache binary specifically, but lldb can certainly find
>> external debug symbols for libc (definitely on ubuntu 14.04, as that's
>> what I use). We need to figure out what is different in your case. The
>> most important function here is SymbolVendorELF::CreateInstance. Could
>> you step through that function, and see why it fails to find the file?
>> On 7 May 2016 at 19:45, Stefan Kratochwil via lldb-dev
>> <lldb-dev at lists.llvm.org> wrote:
>>> I need to gather information about variables on the stack frames of a
>>> program, lets say apache2 (httpd), using the C++ flavour of the lldb
>>> scripting bridge.
>>> Now, if I attach to the corresponding process id, lldb does not find any
>>> debug symbols, although I have installed the debug symbols package for
>>> apache2 (apache2-dbg).
>>> If I use the lldb cli, I have to use
>>> 'target symbols load /usr/lib/debug/usr/sbin/apache2'
>>> (or any other path under /usr/lib/debug, depending on the stack frame /
>>> module I am currently looking at) to load the corresponding debug
>>> However, if I try the same with gdb, then it automagically uses the
>>> under /usr/lib/debug (the non-stripped binaries from any *-dbg package
>>> located here) for symbolification.
>>> Now, there are two questions for me:
>>> 1.: Is there a way to let lldb automagically load debug symbols from
>>> /usr/lib/debug, if there are any?
>>> 2.: If not, how can I do this manually using the C++ API?
>>> The SBTarget class does not have suitable methods for this - the closest
>>> thing is SBTarget#AddModule(), but this gives me a _new_ module, instead
>>> associating a symbolfile with an existing one. The code path of
>>> CommandObjectTarget.cpp#AddModuleSymbols() seems not to be reflected in
>>> scripting bridge, or at least I haven't found it yet.
>> You can use SBDebugger::HandleCommand to execute any command which
>> does have an API equivalent. It's not ideal, but it works. :)
More information about the lldb-dev