Does the following qualify as "interactive usage"?  It seems using "process" 
works in myfile.func(), or I was just lucky? Thanks.
 
(lldb) script myfile.func(args)
 
> Subject: Re: [lldb-dev] lldb type summary provider - SBProcess is invalid
> From: gclay...@apple.com
> Date: Wed, 14 Sep 2016 09:33:20 -0700
> CC: egran...@apple.com; lldb-dev@lists.llvm.org
> To: leik...@msn.com
> 
> 
> > On Sep 13, 2016, at 9:50 PM, Lei Kong via lldb-dev 
> > <lldb-dev@lists.llvm.org> wrote:
> > 
> > Thanks!
> > SBValue.process works!
> >  
> > I have another script that I run manually to search process memory for 
> > certain patterns, not a type summary provider, there is no SBValue passed 
> > to my script, in such a case, how do I get current process?
> >  
> If this is python a command line command you are making, use the variant that 
> takes an execution context:
> 
> def my_command(debugger, command, exe_ctx, result, dict):
>     # Always use the specified execution context to get the target, process
>     # thread and frame. If this command gets run from a breakpoint callback
>     # these will not match the debugger's selected target, the selected 
>     # process in the target, the selected thread in the process and the 
>     # selected frame in the thread.
>     target = exe_ctx.GetTarget()
>     process = exe_ctx.GetProcess()
>     thread = exe_ctx.GetThread()
>     frame = exe_ctx.GetFrame()
> 
> 
> The execution context is explicitly specified for you.
> 
> > From: Enrico Granata
> > Sent: Tuesday, September 13, 2016 10:31 AM
> > To: Lei Kong
> > Cc: lldb-dev@lists.llvm.org
> > Subject: Re: [lldb-dev] lldb type summary provider - SBProcess is invalid
> >  
> > 
> >> On Sep 13, 2016, at 10:02 AM, Lei Kong via lldb-dev 
> >> <lldb-dev@lists.llvm.org> wrote:
> >> 
> >> I wrote a lldb type summary provider for wstring with 16bit wchar on 
> >> Ubuntu 16.04.
> >> 
> >> Things work fine if I manually do the following in lldb:
> >> 
> >> (lldb) script import mytypes
> >> (lldb) type summary add -F mytypes.wstring_SummaryProvider 
> >> "std::__1::wstring"
> >> 
> >> I tried to make things easier with auto-loading by adding the following to 
> >> .lldbinit:
> >> 
> >> script import mytypes
> >> type summary add -F mytypes.wstring_SummaryProvider "std::__1::wstring"
> >> 
> >> Then I got a failure of "SBProcess is invalid" when printing a wstring 
> >> variable.
> >> 
> >> My type summary function has the following, which I believe is where the 
> >> error is encountered:
> >> 
> >> content = lldb.process.ReadMemory(bufferAddr, byteCount, error)
> >> 
> >> Maybe this is because "process" is not assigned yet when the type summary 
> >> is added during auto-loading? Or this is a bug in lldb? Does anyone know 
> >> how to work around this issue?
> >> 
> >> 
> > 
> > Good hunch :-)
> > Maybe we should do a better job at documenting this, but 
> > http://lldb.llvm.org/python-reference.html reads
> > 
> > "While extremely convenient, these variables (lldb.process et alia) have a 
> > couple caveats that you should be aware of. First of all, they hold the 
> > values of the selected objects on entry to the embedded interpreter. They 
> > do not update as you use the LLDB API's to change, for example, the 
> > currently selected stack frame or thread. 
> > Moreover, they are only defined and meaningful while in the interactive 
> > Python interpreter. There is no guarantee on their value in any other 
> > situation, hence you should not use them when defining Python formatters, 
> > breakpoint scripts and commands (or any other Python extension point that 
> > LLDB provides). As a rationale for such behavior, consider that lldb can 
> > run in a multithreaded environment, and another thread might call the 
> > "script" command, changing the value out from under you."
> > 
> > As part of a formatter, you get passed an SBValue. One of the things you 
> > can ask of an SBValue is the process it came from, thusly:
> > 
> > value.GetProcess()
> > 
> > That's the SBProcess object you want to use
> > 
> >>  
> >> Thanks much
> >> 
> >>  
> >>  
> >>  
> >> _______________________________________________
> >> lldb-dev mailing list
> >> lldb-dev@lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> > 
> > 
> > Thanks,
> > - Enrico
> > 📩 egranata@.com ☎️ 27683
> > 
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev@lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> 
                                          
_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to