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
