如何解决Xcode lldb 无法附加到 MacOS 系统程序 /bin/cp -“不允许附加到进程”
当我尝试使用 Xcode 12.4 附带的 LLDB 在 macOS Catalina 10.15.7 和 Big Sur 11.2.2 上运行 Unix cp
命令时,LLDB 在我启动该过程时冻结了几秒钟,然后失败出现以下错误:
error: process exited with status -1 (attach failed (Not allowed to attach to process.查看控制台消息 (Console.app),当附加失败时靠近调试服务器条目。拒绝附加权限的子系统将可能已经记录了一条关于拒绝原因的信息性消息。))
在控制台中,我看到来自 LLDB debugserver
引擎服务器进程的相同错误的 10 个副本正如承诺的那样,形式:
错误:MachTask::TaskPortForProcessID task_for_pid 失败:::task_for_pid (target_tport = 0x0103,pid = 44753,&task) => err = 0x00000005 ((os/kern) failure)
在进程运行时从 lldb
命令行或从 Xcode IDE 附加到进程会产生相同的错误消息,就像尝试使用 sudo lldb
运行调试器和调试进程一样。
我该怎么做才能解决这个问题?
终端会话的完整记录:
$ lldb --version
lldb-1200.0.44.2
Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
$ lldb cp /etc/profile ~/scratchfile.txt
(lldb) target create "cp"
Current executable set to 'cp' (x86_64).
(lldb) settings set -- target.run-args "/etc/profile" "/Users/me/scratchfile.txt"
(lldb) run
error: process exited with status -1 (attach failed (Not allowed to attach to process. Look in the console messages (Console.app),near the debugserver entries when the attached failed. The subsystem that denied the attach permission will likely have logged an informative message about why it was denied.))
解决方法
基本上 macOS 上的 lldb 现在要求您的应用使用 get-task-allow 授权进行签名,这允许其他进程(如调试器)附加到您的应用。或者,您也可以禁用系统完整性保护 (SIP),但这是非常不可取的,因为它会使您的 PC 面临安全风险。
codesign --entitlements debuggee-entitlement.xml ...
debuggee-entitlement.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.get-task-allow</key>
<true/>
</dict>
</plist>
Source: how to debug your app in Qt Creator on macOS (lldb workaround)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。