Thanks a lot, works like a charm! 

Niels

> Yes, "lldb.target", "lldb.process", "lldb.thread" and "lldb.frame" are no 
> longer set as they are global values that can be changed by code that 
> re-enters python. We are need people to not use them anymore except when 
> using the "script" command.
> 
> So to fix this you will want to grab your frame from the debugger object that 
> is passed in:
> 
>    target =  debugger.GetSelectedTarget()
>    process = target.GetProcess()
>    thread = process.GetSelectedThread()
>    frame = thread.GetSelectedFrame()
> 
> Then use "frame" instead of "lldb.frame" when calling EvaluateExpression. 
> Also instead of using magic values, you can use the enums for the 2nd param 
> to EvaluateExpression:
> 
>    res = frame.EvaluateExpression(ecom, lldb.eDynamicCanRunTarget)
> 
> Then be sure to set your error correctly instead of initializing it with a 
> default constructed value:
> 
>    error = res.GetError()
> 
> You might also want to make sure your process is stopped before trying to run 
> the expression:
> 
> 
>    if process.GetState() == eStateStopped:
>        # Evaluate expression
>    else:
>        # print error
> 
> On Jan 7, 2014, at 5:22 AM, Niels Bogaards <[email protected]> wrote:
> 
>> Hi,
>> 
>> I made a script for lldb last year that allowed me to plot a custom object 
>> as a curve from Xcode’s lldb prompt. Worked very well for a year, but no 
>> more. Has anything changed in the EvaluateExpression syntax? Are there 
>> linker options I need to activate in my target c++ program?
>> 
>> Thanks for any help,
>> 
>> Niels
>> 
>> 
>> Here's the script, it outputs: 
>> 
>> - DEBUG - res is No value
>> - DEBUG - fname is No value
>> - DEBUG - error is error: <NULL>
>> 
>> 
>> import lldb
>> import commands
>> import optparse
>> import shlex
>> import logging
>> 
>> def plot(debugger, command, result, dict):
>>      logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - 
>> %(levelname)s - %(message)s')
>>      command_args = shlex.split(command)
>>      usage = "usage: %prog objectName "
>>      description=‘''plot'''
>>      parser = optparse.OptionParser(description=description, 
>> prog='plot',usage=usage)
>>      
>>      try:
>>              (options, args) = parser.parse_args(command_args)
>>      except:
>>              print '"plot" exception'
>>              return
>>      la = len(args)
>>      print 'len args = %d' % la
>>      if len(args) == 1:
>>              ecom = “MyNamespace::MyClass::MyStaticPlotFunction(%s)" % 
>> args[0]
>>              res = lldb.frame.EvaluateExpression(ecom, 1)
>>              fname = 
>> lldb.frame.EvaluateExpression("MyNamespace::MyClass::GetStaticPlotFileName()")
>>              error = lldb.SBError()
>>              logging.debug("res is %s", res);
>>              logging.debug("fname is %s", fname);
>>              logging.debug("error is %s", error);
>> 
>> if __name__ == '__main__':
>>    # This script is being run from the command line, create a debugger in 
>> case we are
>>    # going to use any debugger functions in our function.
>>    lldb.debugger = lldb.SBDebugger.Create()
>>    plot (sys.argv)
>> 
>> def __lldb_init_module (debugger, dict):
>>    # This initializer is being run from LLDB in the embedded command 
>> interpreter
>>    # Add any commands contained in this module to LLDB
>>    debugger.HandleCommand('command script add -f plot.plot plot')
>>    print '"plot" command installed, type "plot --help" for detailed help'
>> 
>> _______________________________________________
>> 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