MacOS Sonoma下使用LLDB调试第三方App遇附加权限拒绝问题
调试第三方Mac App及LLDB适配GDB操作方式
问题1:如何正常调试自动关闭的App并查看运行状态
1. 定位App的可执行文件
第三方App的可执行文件藏在App包内:右键App图标 → 显示包内容 → 进入Contents/MacOS目录,找到与App同名的可执行文件(比如Marked 2的路径为/Applications/Marked 2.app/Contents/MacOS/Marked 2)。
2. 解决调试权限问题
Mac的SIP(系统完整性保护)会限制调试未签名的第三方App,可通过以下方式处理:
- 临时签名(推荐,无需关闭SIP):
- 打开「钥匙串访问」,创建一个「代码签名」类型的自签名证书(名称自定义,比如
DebugCert)。 - 终端执行签名命令:
sudo codesign -s "DebugCert" --deep /Applications/Marked\ 2.app
- 打开「钥匙串访问」,创建一个「代码签名」类型的自签名证书(名称自定义,比如
- 直接用sudo启动LLDB:
终端执行:sudo lldb /Applications/Marked\ 2.app/Contents/MacOS/Marked\ 2
3. 调试流程(类似GDB)
进入LLDB后:
- 设置退出断点(对应GDB的
break _exit):
如果是Swift编写的App,可尝试针对Swift的退出函数设断点:breakpoint set -n _exitbreakpoint set -n Foundation.exit - 启动App:
run - App触发断点后,查看运行状态:
- 查看调用栈:
thread backtrace(可简写为bt) - 查看当前栈帧变量:
frame variable - 查看进程状态:
process status
- 查看调用栈:
4. 排查附加失败问题
如果仍提示附加失败,终端执行以下命令查看debugserver实时日志,定位具体错误:
log stream --predicate 'process == "debugserver"'
问题2:让LLDB像老式GDB一样操作指定可执行文件
完全可以,LLDB支持GDB风格的操作逻辑,甚至可通过配置命令别名进一步贴近GDB使用习惯:
1. 直接指定可执行文件启动(与GDB一致)
终端执行:
sudo lldb <path-to-executable>
进入LLDB后直接用run启动,和GDB的sudo gdb <executable>; run流程完全一致。
2. 配置GDB风格命令别名
编辑~/.lldbinit文件(不存在则新建),添加以下内容:
command alias r run command alias bt thread backtrace command alias b breakpoint set command alias c continue command alias q quit command alias s step command alias n next
保存后重启LLDB,即可使用GDB常用命令:r启动、b _exit设断点、bt看调用栈、c继续执行、q退出等。
内容的提问来源于stack exchange,提问作者ivo Welch
相关产品推荐
相关产品推荐

