[lldb-dev] Cannot use system debugserver for testing

Frédéric Riss via lldb-dev lldb-dev at lists.llvm.org
Mon Jul 22 09:09:56 PDT 2019


I think the system logs (in Console.app) would tell us more. Search for debugserver and you should find attach failures. Then remove the filter and look at what happens right before that. There should be a log from taskgated or authd that is a little more explicit about what’s failing.

Fred 

> On Jul 22, 2019, at 8:55 AM, Gábor Márton via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> 
> Some more info: I've stopped lldb (with the system lldb) when " Process::SetExitStatus (status=-1 (0xffffffff), description="Error 1")" is logged and gathered some more information.
> Is it possible that some packet types are not implemented?
> 
>   * frame #0: 0x00007fff599452c6 libsystem_kernel.dylib`__pthread_kill + 10
>     frame #1: 0x00007fff59a00bf1 libsystem_pthread.dylib`pthread_kill + 284
>     frame #2: 0x00007fff598af6a6 libsystem_c.dylib`abort + 127
>     frame #3: 0x00007fff5987820d libsystem_c.dylib`__assert_rtn + 324
>     frame #4: 0x000000010b393539 liblldb.10.0.99svn.dylib`lldb_private::Process::SetExitStatus(this=0x00007fcfaa470218, status=-1, cstr="Error 1") at Process.cpp:1149:3
>     frame #5: 0x000000010bbd1792 liblldb.10.0.99svn.dylib`lldb_private::process_gdb_remote::ProcessGDBRemote::AsyncThread(arg=0x00007fcfaa470218) at ProcessGDBRemote.cpp:3877:28
>     frame #6: 0x000000010b08f87b liblldb.10.0.99svn.dylib`lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(arg=0x00007fcfab218740) at HostNativeThreadBase.cpp:69:10
>     frame #7: 0x0000000112be72fd liblldb.10.0.99svn.dylib`lldb_private::HostThreadMacOSX::ThreadCreateTrampoline(arg=0x00007fcfab218740) at HostThreadMacOSX.mm:68:10
>     frame #8: 0x00007fff599fe2eb libsystem_pthread.dylib`_pthread_body + 126
>     frame #9: 0x00007fff59a01249 libsystem_pthread.dylib`_pthread_start + 66
>     frame #10: 0x00007fff599fd40d libsystem_pthread.dylib`thread_start + 13
> (lldb) frame select 5
> frame #5: 0x000000010bbd1792 liblldb.10.0.99svn.dylib`lldb_private::process_gdb_remote::ProcessGDBRemote::AsyncThread(arg=0x00007fcfaa470218) at ProcessGDBRemote.cpp:3877:28
>    3874                                              "System Integrity Protection");
>    3875                 } else if (::strstr(continue_cstr, "vAttach") != nullptr &&
>    3876                            response.GetStatus().Fail()) {
> -> 3877                   process->SetExitStatus(-1, response.GetStatus().AsCString());
>    3878                 } else {
>    3879                   process->SetExitStatus(-1, "lost connection");
>    3880                 }
> (lldb) p response.GetError()
> (uint8_t) $0 = '\x01'
> (lldb) p response.GetServerPacketType()
> (StringExtractorGDBRemote::ServerPacketType) $1 = eServerPacketType_unimplemented
> (lldb) p response.GetResponseType()
> (StringExtractorGDBRemote::ResponseType) $2 = eError
> (lldb) p response.IsUnsupportedResponse()
> (bool) $3 = false
> (lldb) p response.GetStatus()
> (lldb_private::Status) $4 = (m_code = 1, m_type = eErrorTypeGeneric, m_string = "Error 1")
> 
> 
> Thanks,
> Gabor
> 
> On Mon, Jul 22, 2019 at 4:59 PM Gábor Márton <martongabesz at gmail.com <mailto:martongabesz at gmail.com>> wrote:
> Yes, here it is.
> 
> egbomrt at msmarple ~/llvm2/build/release_assert $ ./bin/lldb ~/a.out
> (lldb) target create "/Users/egbomrt/a.out"
> Current executable set to '/Users/egbomrt/a.out' (x86_64).
> (lldb) log enable lldb default
> (lldb) r
>  Processing command: r
>  HandleCommand, cmd_obj : 'process launch'
>  HandleCommand, (revised) command_string: 'process launch -X true --'
>  HandleCommand, wants_raw_input:'False'
>  HandleCommand, command line after removing command name(s): '-X true --'
>  Target::Launch() called for /Users/egbomrt/a.out
>  Target::Launch the process instance doesn't currently exist.
>  have platform=true, platform_sp->IsHost()=true, default_to_use_pty=true
>  at least one of stdin/stdout/stderr was not set, evaluating default handling
>  target stdin='(empty)', target stdout='(empty)', stderr='(empty)'
>  Generating a pty to use for stdin/out/err
>  Target::Launch asking the platform to debug the process
>  Host::StartMonitoringChildProcess (callback, pid=94887, monitor_signals=0) source = 0x7f9bb923ec10
> 
>  ::waitpid (pid = 94887, &status, 0) => pid = 94887, status = 0x00000000 (EXITED), signal = 0, exit_status = 0
>  Host::StartMonitoringChildProcess (callback, pid=94888, monitor_signals=0) source = 0x7f9bb9218180
> 
>  Went to stop the private state thread, but it was already invalid.
>  Process::SetPublicState (state = attaching, restarted = 0)
>  Host::StartMonitoringChildProcess (callback, pid=94889, monitor_signals=0) source = 0x7f9bb9243bd0
> 
>  thread created
>  Process::AttachCompletionHandler::AttachCompletionHandler process=0x7f9bb8803c18, exec_count=0
>  Process::ControlPrivateStateThread (signal = 4)
>  Sending control event of type: 4.
>  thread created
>  Process::RunPrivateStateThread (arg = 0x7f9bb8803c18, pid = 94888) thread starting...
>  timeout = <infinite>, event_sp)...
>  Process::RunPrivateStateThread (arg = 0x7f9bb8803c18, pid = 94888) got a control event: 4
>  timeout = <infinite>, event_sp)...
>  timeout = <infinite>
>  timeout = <infinite>, event_sp)...
>  thread created
>  Process::SetExitStatus (status=-1 (0xffffffff), description="Error 1")
>  Process::SetPrivateState (exited)
>  Process::SetPrivateState (exited) stop_id = 1
>  Process::AttachCompletionHandler::PerformAction called with state exited (10)
>  Ran next event action, result was 2.
>  Process::ShouldBroadcastEvent (0x7f9bb92423b0) => new state: exited, last broadcast state: exited - YES
>  Process::HandlePrivateEvent (pid = 94888) broadcasting new state exited (old state attaching) to hijacked
>  Process::RunPrivateStateThread (arg = 0x7f9bb8803c18, pid = 94888) about to exit with internal state exited...
>  Process::RunPrivateStateThread (arg = 0x7f9bb8803c18, pid = 94888) thread exiting...
>  Process::SetPublicState (state = exited, restarted = 0)
>  timeout = <infinite>, event_sp) => exited
>  HandleCommand, command did not succeed
> error: process exited with status -1 (Error 1)
> (lldb)  ::waitpid (pid = 94889, &status, 0) => pid = 94889, status = 0x00000000 (EXITED), signal = 0, exit_status = 0
> (lldb)
> 
> On Mon, Jul 22, 2019 at 4:44 PM Stefan Gränitz <stefan.graenitz at gmail.com <mailto:stefan.graenitz at gmail.com>> wrote:
> Interesting. Is there any extra info dumped to the log (e.g. `log enable lldb default`)
> 
> On 22/07/2019 16:34, Gábor Márton wrote:
>> Well, SIP is turned off and I experience the same with a binary I just built:
>> ```
>> egbomrt at msmarple ~/llvm2/build/release_assert $ csrutil status
>> System Integrity Protection status: disabled.
>> egbomrt at msmarple ~/llvm2/build/release_assert $ ./bin/lldb ~/a.out
>> (lldb) target create "/Users/egbomrt/a.out"
>> Current executable set to '/Users/egbomrt/a.out' (x86_64).
>> (lldb) r
>> error: process exited with status -1 (Error 1)
>> (lldb) ^D
>> egbomrt at msmarple ~/llvm2/build/release_assert $ ls -la ~/a.out
>> -rwxr-xr-x  1 egbomrt  admin  8736 Júl 22 16:16 /Users/egbomrt/a.out
>> egbomrt at msmarple ~/llvm2/build/release_assert $
>> ```
>> 
>> On Mon, Jul 22, 2019 at 4:29 PM Stefan Gränitz <stefan.graenitz at gmail.com <mailto:stefan.graenitz at gmail.com>> wrote:
>>> egbomrt at msmarple ~/llvm2/build/release_assert $ ./bin/lldb /bin/ls
>>> (lldb) target create "/bin/ls"
>>> Current executable set to '/bin/ls' (x86_64).
>>> (lldb) r
>>> error: process exited with status -1 (Error 1)
>> I don't think this is related to debugserver codesigning. If you really need to debug system binaries, you may need to disable SIP.
>> 
>> On 22/07/2019 16:14, Gábor Márton wrote:
>>> I am still struggling with this issue. Now I decided to work with the codesigned version of the debugserver, becasue I had an error when I tried to use the system debugserver.
>>> So I've run scripts/macos-setup-codesign.sh
>>> After a reboot and fresh build (I have removed the CMakeCache.txt and the whole build dir) I have the debugserver signed:
>>> ```
>>> $ codesign -dvvvv ~/llvm2/build/release_assert/bin/debugserver
>>> Executable=/Users/egbomrt/llvm2/build/release_assert/bin/debugserver
>>> Identifier=com.apple.debugserver
>>> Format=Mach-O thin (x86_64)
>>> CodeDirectory v=20100 size=38534 flags=0x0(none) hashes=1197+5 location=embedded
>>> VersionPlatform=1
>>> VersionMin=658944
>>> VersionSDK=658944
>>> Hash type=sha256 size=32
>>> CandidateCDHash sha256=7b475cfa7127c84281ceb206093d13dd464dad74
>>> Hash choices=sha256
>>> Page size=4096
>>> CDHash=7b475cfa7127c84281ceb206093d13dd464dad74
>>> Signature size=1611
>>> Authority=lldb_codesign
>>> Signed Time=2019. Jul 22. 15:26:29
>>> Info.plist entries=6
>>> TeamIdentifier=not set
>>> Sealed Resources=none
>>> Internal requirements count=1 size=100
>>> $
>>> ```
>>> 
>>> So far so good.
>>> But then when I try to use lldb I have permission problems:
>>> ```
>>> egbomrt at msmarple ~/llvm2/build/release_assert $ ./bin/lldb /bin/ls
>>> (lldb) target create "/bin/ls"
>>> Current executable set to '/bin/ls' (x86_64).
>>> (lldb) r
>>> error: process exited with status -1 (Error 1)
>>> (lldb) ^D
>>> egbomrt at msmarple ~/llvm2/build/release_assert $
>>> ```
>>> 
>>> However, as root I can use lldb:
>>> ```
>>> egbomrt at msmarple ~/llvm2/build/release_assert $ sudo ./bin/lldb /bin/ls
>>> (lldb) target create "/bin/ls"
>>> Current executable set to '/bin/ls' (x86_64).
>>> (lldb) r
>>> Process 28052 launched: '/bin/ls' (x86_64)
>>> .ninja_deps                     compile_commands.json
>>> .ninja_log                      docs
>>> CMakeCache.txt                  examples
>>> CMakeDoxyfile.in                include
>>> ...
>>> Process 28052 exited with status = 0 (0x00000000)
>>> (lldb) ^D
>>> egbomrt at msmarple ~/llvm2/build/release_assert $
>>> ```
>>> 
>>> Is it possible to codesign in a way that a regular user can run the built debugserver? Or what else could be the reason behind this permission problem?
>>> 
>>> Thanks,
>>> Gabor
>>> 
>>> On Fri, Jul 19, 2019 at 11:47 PM Stefan Gränitz <stefan.graenitz at gmail.com <mailto:stefan.graenitz at gmail.com>> wrote:
>>> Hi Gábor, I am sorry this caused an issue for you. Good that apparently it's resolved now.
>>> 
>>> Did you reconfigure an existing build-tree? Your observations would make sense in this context, because the change affects CMake cached variables. This is unfortunate, but can not always be                       avoided. If this happens again (or to anyone else), a clean build seems to be a good first step.
>>> 
>>> Best,
>>> Stefan
>>> 
>>> On 19/07/2019 19:36, Gábor Márton wrote:
>>> 
>>>> Actually, it is embarrassing (perhaps for macOS and not for me) that after a reboot the problem is gone.
>>>> Perhaps after "sudo /usr/sbin/DevToolsSecurity --enable" a reboot is required, but could not find anything official about that.
>>>> 
>>>> On Fri, Jul 19, 2019 at 7:20 PM Gábor Márton <martongabesz at gmail.com <mailto:martongabesz at gmail.com>> wrote:
>>>> This might not be related to the debugserver, I just realized that I get 
>>>> "error: process exited with status -1 (Error 1)"
>>>> even with the simplest main.c.
>>>> This may be some kind of security issue on mac OS...
>>>> Though I've checked and I have SIP disabled and I have executed "sudo /usr/sbin/DevToolsSecurity --enable".
>>>> 
>>>> On Fri, Jul 19, 2019 at 4:46 PM Gábor Márton <martongabesz at gmail.com <mailto:martongabesz at gmail.com>> wrote:
>>>> Hi Stefan,
>>>> 
>>>> Since the commit
>>>> "[CMake] Always build debugserver on Darwin and allow tests to use the system's one"
>>>> I cannot use the system debugserver for testing.
>>>> I receive the following error message from lldb when I execute "ninja check-lldb":
>>>> ```
>>>> runCmd: run
>>>> runCmd failed!
>>>> error: process exited with status -1 (Error 1)
>>>> ```
>>>> 
>>>> I do set up "-DLLDB_USE_SYSTEM_DEBUGSERVER=ON" with cmake so I see
>>>> ```
>>>> -- LLDB tests use out-of-tree debugserver: /Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Resources/debugserver
>>>> ```
>>>> 
>>>> Also, I have inspected the following test output
>>>> ```
>>>> Command invoked: /usr/bin/python /Users/egbomrt/llvm2/git/llvm/tools/lldb/test/dotest.py -q --arch=x86_64 -s /Users/egbomrt/llvm2/build/release_assert/lldb-test-traces --build-dir /Users/egbomrt/llvm2/build/release_assert/lldb-test-build.noindex -S nm -u CXXFLAGS -u CFLAGS --executable /Users/egbomrt/llvm2/build/release_assert/./bin/lldb --dsymutil /Users/egbomrt/llvm2/build/release_assert/./bin/dsymutil --filecheck /Users/egbomrt/llvm2/build/release_assert/./bin/FileCheck -C /Users/egbomrt/llvm2/build/release_assert/bin/clang --codesign-identity - --out-of-tree-debugserver --arch x86_64 -t --env TERM=vt100 -p TestCModules.py --results-port 49931 -S nm --inferior -p TestCModules.py /Users/egbomrt/llvm2/git/llvm/tools/lldb/packages/Python/lldbsuite/test/lang/c/modules --event-add-entries worker_index=0:int
>>>>   1 out of 736 test suites processed - TestCModules.py
>>>> ```
>>>> so it seems like the argument for --out-of-tree-debugserver is missing...
>>>> 
>>>> Could you please advise?
>>>> 
>>>> Thank you,
>>>> Gabor
>>> -- 
>>> https://flowcrypt.com/pub/stefan.graenitz@gmail.com <https://flowcrypt.com/pub/stefan.graenitz@gmail.com>-- 
>> https://flowcrypt.com/pub/stefan.graenitz@gmail.com <https://flowcrypt.com/pub/stefan.graenitz@gmail.com>-- 
> https://flowcrypt.com/pub/stefan.graenitz@gmail.com <https://flowcrypt.com/pub/stefan.graenitz@gmail.com>_______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> https://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/20190722/faeb4ff9/attachment-0001.html>


More information about the lldb-dev mailing list