如何在macOS非root权限下运行LLDB并调试进程?
macOS无需root权限使用LLDB调试其他进程的方法
以下是几种可行的方案,覆盖不同场景:
调试自己编译/启动的进程
若目标进程是你自己编译、或以当前用户身份启动的,完全不需要root权限:- 直接用LLDB命令附加:
lldb -n <进程名>或者lldb -p <进程PID>即可,LLDB会自动匹配用户权限完成附加。 - 若编译后出现调试权限问题,可给程序添加调试权限签名:
- 创建
debug-entitlements.plist文件,内容如下:<?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> - 用codesign签名程序:
codesign -s - -f --entitlements debug-entitlements.plist <你的程序路径>
这个签名会赋予程序被调试的权限,后续直接用LLDB附加即可。
- 创建
- 直接用LLDB命令附加:
借助Xcode调试
如果你是开发自有应用,直接用Xcode的调试功能即可——Xcode会自动处理所有权限和签名问题,全程不需要root,甚至无需手动输入LLDB命令。调整系统调试权限(需IT协助)
若需要调试同用户组下其他用户的进程,可请求IT修改/etc/authorization文件中的system.privilege.taskport条目,将允许的用户范围从admin扩展到当前用户组。修改后,同组用户的进程即可用LLDB附加,无需root。注意:修改系统配置需谨慎,必须由IT操作以避免风险。
内容的提问来源于stack exchange,提问作者Rol
相关产品推荐
相关产品推荐

