That's to be expected.  After all, SBProcess.Continue() is a scripting function 
that continues the process, you wouldn't want that to print stop information to 
stdout, that isn't an appropriate thing for a lower level function to do.

You can use SBThread::GetStatus to print the stop status of the thread in the 
same way the command interpreter does when it stops at a thread, if that is 
what you want your command to do.  If you are writing a Python based command, 
the correct way to do this is to set the status into the result object of your 
command.

Jim



> On Aug 13, 2014, at 10:43 AM, Ted Woodward <[email protected]> 
> wrote:
> 
> It's hitting the breakpoint:
> 
> Process 1 stopped
> * thread #1: tid = 0x0001, 0x00004130 factorial`main(argc=1, argv=0x0000b100) 
> + 28 at factorial.c:32, stop reason = breakpoint 1.1
>    frame #0: 0x00004130 factorial`main(argc=1, argv=0x0000b100) + 28 at 
> factorial.c:32
>   29     }
>   30   */
>   31  
> -> 32     base = 10;
>   33  
>   34     printf("Factorial of %d is %d\n", base, factorial(base));
>   35     return 0;
> 
> But I don't get the prompt. If I do debugger.SetAsync(False), it hits the 
> breakpoint and gives me the prompt, but I don't get the source list that I 
> expect when I hit a breakpoint.
> 
> The process is launched - it's running on a simulator that I'm talking to 
> using gdb-remote.
> 
> Ted
> 
> -----Original Message-----
> From: Greg Clayton [mailto:[email protected]] 
> Sent: Tuesday, August 12, 2014 6:14 PM
> To: Ted Woodward
> Cc: Jim Ingham; [email protected]
> Subject: Re: [lldb-dev] python command returns different values in a script 
> and interactively
> 
> Your debugger is in synchronous mode which means process.Continue() won't 
> return until your process stops. If you just want to run your target and not 
> wait for it to stop try:
> 
> debugger.SetAsync(False)
> 
> then do your process.Continue()
> 
> This should let your script exit and then catch the event back in the 
> debugger when it does stop. Then CTRL+C should work as well.
> 
> NOTE: process.Continue() won't work unless your process is already launched. 
> Just wanted to make sure you weren't expecting it to launch your process.
> 
> Greg
> 
>> On Aug 12, 2014, at 3:58 PM, Ted Woodward <[email protected]> 
>> wrote:
>> 
>> That fixed it, thanks Jim!
>> 
>> My next problem - I want to set a breakpoint at main and continue. This 
>> works, but I don't get the lldb prompt back, and can't do debugging. My code 
>> is:
>> 
>> def start (debugger, register, result, dict):
>>   run (debugger, register, result, dict)
>>   target = debugger.GetSelectedTarget()
>>   process = target.GetProcess()
>>   target.BreakpointCreateByName("main")
>>   process.Continue()
>> 
>> ctrl-c doesn't break. I have to hit ctrl-z and kill lldb.
>> 
>> Ted
>> 
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]] 
>> Sent: Tuesday, August 12, 2014 5:25 PM
>> To: Ted Woodward
>> Cc: [email protected]
>> Subject: Re: [lldb-dev] python command returns different values in a script 
>> and interactively
>> 
>> The lldb.{target,process,thread} globals are only set when running the 
>> interactive script interpreter in the lldb "script" command.  They aren't 
>> available in other environments like the breakpoint commands, or Python 
>> based user defined commands, etc.  They are really just for convenience when 
>> prototyping scripts.
>> 
>> In some actual Python code you should have some clear way, depending on the 
>> environment, what target you mean.  For instance, if you are writing a 
>> Python based lldb command, you might want to operate on the currently 
>> selected target (which you can look up in the debugger passed in to you) or 
>> you might want to look up a target by name, etc.  In a breakpoint command 
>> the relevant target will be the one which owns the process that owns the 
>> frame that actually hit the breakpoint, etc...
>> 
>> Jim
>> 
>>> On Aug 12, 2014, at 3:15 PM, Ted Woodward <[email protected]> 
>>> wrote:
>>> 
>>> I’m trying to write a python script that will launch a simulator to run the 
>>> current target. In my script, I’ve got this code:
>>>   foo = lldb.target.GetExecutable().__get_fullpath__()
>>>   print foo
>>>   print type(foo)
>>> 
>>> When I run it, I get this:
>>> None
>>> <type 'NoneType'>
>>> 
>>> But if I run the same commands interactively, I get the right values:
>>> (lldb) script foo = lldb.target.GetExecutable().__get_fullpath__()
>>> (lldb) script print foo
>>> /usr2/ted/lldb_test/factorial
>>> (lldb) script print type(foo)
>>> <type 'str'>
>>> 
>>> After calling lldb.target.GetExecutable().__get_fullpath__() interactively, 
>>> my script starts to work.
>>> 
>>> Why doesn’t it work in the script if I don’t call it interactively? How can 
>>> I get it to work?
>>> 
>>> Thanks,
>>> 
>>> Ted
>>> _______________________________________________
>>> 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