> 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