[lldb-dev] Better error message for attaching to a process already being debugged

Jim Ingham via lldb-dev lldb-dev at lists.llvm.org
Wed Mar 9 17:57:24 PST 2016

> On Mar 9, 2016, at 3:04 PM, Jeffrey Tan via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> Hi,
> My colleague is trying to use our lldb IDE attaching to app run/build from Xcode which failed. I can reproduce this with lldb console:
> jeffreytan-mbp:$ ps aux | grep iOSApp
> jeffreytan      61816   0.0  0.0  2432772    676 s002  S+    3:00PM   0:00.00 grep iOSApp
> jeffreytan      61806   0.0  0.2  2721120  38600   ??  SXs   3:00PM   0:00.24 /Users/jeffreytan/Library/Developer/CoreSimulator/Devices/EF17E202-3981-4DB0-87C9-2A9345C1E713/data/Containers/Bundle/Application/CAEBA7D7-D284-4489-8A53-A88E56F9BB04/iOSAppTest.app/iOSAppTest
> jeffreytan-mbp:$ lldb -p 61806
> (lldb) process attach --pid 61806
> error: attach failed: attach failed: unable to attach
> My theory is:
> 1. Xcode does not have the concept of run without debugger and run under debugger, so it always run app with debugger enabled.(Is this true?)

That is not true.  In the Run Scheme, uncheck the "Debug Executable" checkbox.  But running with the debugger is the default.

Note, an X in the status field for ps means the app is being debugged.  So in this case, the app you were trying to attach to WAS already being debugged.

> 2. And you can't have two native debuggers debugging the same process on Mac(this is true on Windows, is it true for Mac or Linux?)

That is true for Mac, and in general for ptrace based debugging.  I don't know much about procfs.

> If both are true, can we report meaningful message like "inferior is already being debugged" or something similar instead of the generic error message like "attach failed: unable to attach"?

That should be possible, there's code to eliminate already debugged processes in the "Attach to process by name" functionality.  So if you specify a PID and the attach fails, we could check after the fact and see if it is already being traced.  Please file a bug for this, and/or take a whack at fixing it if you feel like it.

> Btw: I found I can still use gdb to attach to the process(with a permission elevation dialog pop-up) and see the callstack. How does gdb do that?

I haven't looked at the FSF gdb OS X support for years, so I can't really comment on it.  But it is not possible to ptrace something that is already ptraced, so if gdb is still doing it this way, then it should also fail.  Maybe it is only getting the mach task and exception ports and debugging just with them?  You can have multiple readers for the task port, and you can steal the exception port from someone else.  But if it did that, the other debugger should stop working.


> Jeffrey
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

More information about the lldb-dev mailing list