[lldb-dev] How does attach work on non-Windows?

Todd Fiala via lldb-dev lldb-dev at lists.llvm.org
Wed Aug 26 15:16:32 PDT 2015

I seem to recall on the Linux side that this gets a bit complicated.
Attaching vs. launching get different sequences of stops, as do the number
of hops through possible shells in between a launch and an attach.  So we
pass through a skip-stop count (which I think both OS X and Linux use) to
figure out how many of them we need to skip before we say we're attached.

Are we at the point where everything is using lldb-server/debugserver
everywhere on OS X/Linux/*BSD even for local debugging?  If so, all those
platforms probably have a point in the gdb protocol that they know they're
attached and ready to go.  If we have an analog on the Windows side, is it
just a matter of exposing that for the client code that attaches to the

On Wed, Aug 26, 2015 at 3:09 PM, Zachary Turner via lldb-dev <
lldb-dev at lists.llvm.org> wrote:

> Assuming we can find a reasonable way to detect this on all platforms, can
> I replace current wait-for-debugger-attach code in the test inferiors to
> use this method?  It's all very racy right now, and there are combinations
> of sleeps and loops in the executables sometimes working together with
> sleeps in the test cases to synchronize the test and the executable.  If we
> had a common method that allowed inferiors to just say "wait until some
> debugger is attached to me" I think some of our problems would go away.
> Would you mind posting a code snippet for how to do this on OS X so
> someone familiar with FreeBSD and/or Linux can comment on if there's a
> similar one for their platform?
> On Wed, Aug 26, 2015 at 3:04 PM Jim Ingham <jingham at apple.com> wrote:
>> There is a way on OS X.  There is a sysctl that will give you information
>> on the current process state, and one of the bits you get back says whether
>> the process is being traced.  sysctl's are a generic UNIX thing, but I
>> don't know if the bit OS X uses is shared with other Unix's.
>> Jim
>> > On Aug 26, 2015, at 2:20 PM, Zachary Turner via lldb-dev <
>> lldb-dev at lists.llvm.org> wrote:
>> >
>> > Slightly related, but do other platforms have a way to check from an
>> inferior if a debugger is present?
>> >
>> > We need to do this frequently from the test inferiors, and I see lots
>> of different approaches used in the test programs, none of which work
>> correctly on Windows.
>> >
>> > On Wed, Aug 26, 2015 at 2:09 PM Zachary Turner <zturner at google.com>
>> wrote:
>> > On Windows, when we attach to process, we basically invoke a system
>> call which tells the kernel to kick off the process necessary for a
>> debugger to be able to communicate with the process.
>> >
>> > The end result of all this is that eventually the OS itself will
>> generate a breakpoint in the inferior by injecting an additional thread
>> into the inferior and breaking on that thread.
>> >
>> > LLDB picks this up, and the result is that LLDB stops and waits for the
>> user to continue the inferior just as it would with any other breakpoint,
>> and if you were to get a backtrace you might see something like this:
>> >
>> > looking at: Stack traces for SBProcess: pid = 12588, state = stopped,
>> threads = 2, executable = test_with_dwarf_and_attach_to_process_with_id_api
>> > Stack trace for thread id=0x3428 name=None queue=None stop reason=none
>> >   frame #0: 0xffffffffffffffff ntdll.dll`DbgBreakPoint + 1
>> >
>> > Stack trace for thread id=0x4314 name=None queue=None stop reason=none
>> >   frame #0: 0x00000077908c2c None`None + -18446744071703589843
>> >
>> >
>> > My question is: Do other platforms have this concept of an OS-generated
>> breakpoint?  Or when you attach to the process, would the first breakpoint
>> opcode encountered by the inferior be one which was created by the user
>> through some command from the debugger?
>> >
>> > This creates a problem for some of our tests, because we have this
>> extra breakpoint that is messing up the stack frame expectations unless we
>> issue a manual continue first to get past the initial breakpoitn and to the
>> first user breakpoint.
>> > _______________________________________________
>> > lldb-dev mailing list
>> > lldb-dev at lists.llvm.org
>> >
>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_lldb-2Ddev&d=BQIGaQ&c=eEvniauFctOgLOKGJOplqw&r=aTCVT7yw0RLKhx7ZXY2faboS3m1dhXpYF-Av4XoSGMU&m=VvFNLC1Qe6kBmEoVqGF9NZIVrDnFQZBDYfsUdMRn1aE&s=9o1ODu6v5nQisbSZVZpKU56ZDygZTcK6a_1juRJLhis&e=
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20150826/8e27d930/attachment.html>

More information about the lldb-dev mailing list