On May 29, 2013, at 5:18 PM, Enrico Granata <[email protected]> wrote:

> 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.

I wouldn't spend any time playing with the synchronous mode, since the process 
has other interesting events (in particular I/O when you are debugging 
remotely) that you will want to receive, and you'll need to be consuming events 
to get that.

Jim

> 
> On May 29, 2013, at 5:07 PM, Sebastien Metrot <[email protected]> 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
>> [email protected]
>> 
>> _______________________________________________
>> lldb-dev mailing list
>> [email protected]
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> 
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to