[lldb-dev] C++ API question

Enrico Granata egranata at apple.com
Wed May 29 17:18:22 PDT 2013


Are you in synchronous mode?
If not, or if you are not sure what the question even means, you most probably are not.
The way LLDB works is an event system. You tell your process to run and that spawns a series of events. Events that you have to consume.
You tell your process to stop, and when it stops, you get an event that tells you so.
Anything until then, process is NOT stopped, and that's why you get errors saying "process is running", because you have yet to see the stop event and consume it.
If you want an example of how to setup an automated interaction with LLDB, part of your checkout should be an LLDBPerf project
Look around in TestCase.cpp there (http://llvm.org/svn/llvm-project/lldb/trunk/tools/lldb-perf/lib/TestCase.cpp) - the Loop() method implements a state machine that correctly consumes the events - that might be a good starting point.
To keep it really simple if you're just prototyping, SBDebugger::SetAsync(false) will set LLDB in synchronous mode. In this mode of operation, the API calls consume the events before returning, and relieve you of that duty - I am not sure how complete and reliable the synchronous mode is, since we do not use it.

On May 29, 2013, at 5:07 PM, Sebastien Metrot <meeloo at gmail.com> wrote:

> Hello,
> 
> Now that my build problems are fixed I have started to do a little more than extracting symbols from OSX applications and I have a strange situation. 
> I create a target, add a symbolic breakpoint on 'main', launch the process and then inspect the threads + their stack frames. What troubles me is that I correctly find 1 thread but it always says there is 0 frames, meanwhile calling the method lldb::SBThread::GetStatus(..) and displaying its results correctly shows me what I'm expecting (a stack frame with the breakpoint on my main function). I have tried to step in lldb code and from what I understand GetNumFrames & all return 0 because it says the process is still running as it is unable to get some lock/mutex.
> 
> When I enable logs for API here is what I get:
> LLDB> 1369872253.995728 SBProcess(0x1250bec00)::GetNumThreads () => 1
> LLDB> 1369872253.995767 SBProcess(0x1250bec00)::Stop () => SBError (0x105602010): success
> LLDB> 1369872253.995790 SBProcess(0x1250bec00)::GetThreadAtIndex (index=0) => SBThread(0x110b313d0)
> LLDB> 1369872253.995807 SBThread(0x110b313d0)::GetNumFrames() => error: process is running
> LLDB> 1369872253.995816 SBThread(0x110b313d0)::GetNumFrames () => 0
> LLDB> 1369872253.995826 SBThread(0x110b313d0)::GetStopReason() => error: process is running
> LLDB> 1369872253.995833 SBThread(0x110b313d0)::GetStopReason () => invalid
> LLDB> 1369872253.999252 SBThread(0x110b313d0)::GetName() => error: process is running
> LLDB> 1369872253.999277 SBThread(0x110b313d0)::GetName () => NULL
> 
> I am clearly missing something here but what?
> 
> S.
>  
> -- 
> Sebastien Metrot
> Yasound - CTO - Cofounder
> sebastien at yasound.com
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20130529/2ad1e95f/attachment.html>


More information about the lldb-dev mailing list