> On Sep 13, 2016, at 9:50 PM, Lei Kong via lldb-dev <[email protected]>
> 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: [email protected]
> Subject: Re: [lldb-dev] lldb type summary provider - SBProcess is invalid
>
>
>> On Sep 13, 2016, at 10:02 AM, Lei Kong via lldb-dev
>> <[email protected]> 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
>> [email protected]
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>
>
> Thanks,
> - Enrico
> 📩 egranata@.com ☎️ 27683
>
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev