[lldb-dev] Using LLDB to catch a spurious segfault: scripting, etc.

William Knop william.knop.nospam at gmail.com
Sat Apr 2 06:30:17 PDT 2011


Oops, I forgot to attach the script; here it is.

Will

On Sat, Apr 2, 2011 at 9:05 AM, William Knop
<william.knop.nospam at gmail.com> wrote:
> Hi again,
> I've gotten quite far with this script (attached), however I cannot
> figure out if there is a way invoke the lldb interpreter (i.e. the
> "(lldb)" prompt). It would seem that one could somehow activate the
> debugger's EditLineInputReader, perhaps via PushInputReader.
> Unfortunately, EditLineInputReader doesn't appear to be exposed. At
> this point, I may write a small hackish python function that loops,
> sending input via HandleCommand. If there's another way where I don't
> have to hack out an interpreter loop, I'd be grateful to hear of it.
>
> Will
>
> On Fri, Apr 1, 2011 at 9:41 PM, William Knop
> <william.knop.nospam at gmail.com> wrote:
>> Brilliant! Between this example and Jim's, I think I'll be able to put
>> something nice together.
>>
>> Thank you both,
>> Will
>>
>> On Fri, Apr 1, 2011 at 9:26 PM, Johnny Chen <johnny.chen at apple.com> wrote:
>>> Hi William,
>>> Wonder if:
>>> URL: http://llvm.org/viewvc/llvm-project?rev=128755&view=rev
>>> Log:
>>> Add a Python script which launches a program from within lldb and loop until
>>> the
>>> process stops for some reason.  main.c (compiled into a.out) is used as an
>>> example in
>>> the README-run-until-faulted file.
>>>
>>> Added:
>>>    lldb/trunk/utils/test/README-run-until-faulted
>>>    lldb/trunk/utils/test/main.c
>>>    lldb/trunk/utils/test/run-until-faulted.py   (with props)
>>>
>>> is a good enough start for your need?
>>> Thanks.
>>> On Mar 31, 2011, at 6:15 PM, William Knop wrote:
>>>
>>> Hello all,
>>>
>>> I am attempting to use lldb to debug a segfault in my program that
>>> happens sporadically. For instance, running `for ((i=0;i<1000;i++)) {
>>> ./myprogram; };` at a shell prompt may show one. It seems there is no
>>> way to set lldb to run automatically and exit upon success from the
>>> CLI, so I've been exploring lldb's python scripting.
>>>
>>> The goal of the script is to loop, launching the process until
>>> completion or error; if there's an error, I need the script to dump me
>>> back into the lldb interpreter to investigate the bug. Here's what
>>> I've come up with so far:
>>>
>>> import time
>>>
>>> dbg = lldb.SBDebugger.FindDebuggerWithID(lldb.debugger_unique_id)
>>>
>>> ci = dbg.GetCommandInterpreter()
>>>
>>> res = lldb.SBCommandReturnObject()
>>>
>>> dbg.SetAsync(False)
>>>
>>> for i in range(1, 1000):
>>>
>>>  ci.HandleCommand("process launch", res)
>>>
>>>  while (not res.Succeeded()) : time.sleep(0.1)
>>>
>>>  res.Clear()
>>>
>>> Unfortunately, however, it seems the command does not run to
>>> completion, no matter how long I wait. Then when I call
>>> `HandleCommand` a second time, lldb deadlocks. I intended to
>>> eventually check `res.GetError()` or `res.GetStatus()` and call
>>> `quit()` when the error appeared, but I haven't made it that far. I
>>> also initially explored calling `dbg.GetTargetAtIndex(0).Launch()`
>>> rather than `HandleCommand`, but I wasn't entirely sure how to go
>>> about it. Any help would be much appreciated!
>>>
>>> Will
>>> _______________________________________________
>>> lldb-dev mailing list
>>> lldb-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>
>>>
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lldb_run_till_exception.py
Type: text/x-python-script
Size: 3305 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20110402/03499f46/attachment.bin>


More information about the lldb-dev mailing list