MacOS SSH远程LLDB调试自定义程序报错:process exited with status -1
SSH连接Sonoma 14(arm64)调试x86_64程序时lldb报错
process exited with status -1 遇到的情况
通过SSH连接到arm64架构的MacOS Sonoma 14主机,用lldb调试自己用clang编译的程序时,执行run命令会弹出报错:
(lldb) error: process exited with status -1 (no such process.)
但调试苹果官方签名的系统程序(比如/bin/ls)完全正常,初步判断问题和程序签名权限有关。
已试过但没用的操作
- 按照苹果官方文档给程序做自签名
- 添加包含
com.apple.security.get-task-allow权限的entitlements(Xcode编译的签名程序用的配置如下):<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.application-identifier</key> <string></string> <key>com.apple.security.get-task-allow</key> <true/> </dict> </plist> - 用
sudo启动lldb - 执行
sudo DevToolsSecurity --enable开启开发者工具权限 - 执行
spctl developer-mode enable-terminal开启终端开发者模式
排查后的关键结论
- 把
/bin/ls复制出来重新自签名后,能正常调用task_for_pid;但自己写的程序调用这个接口时返回(os/kern) failure错误 - 只有同时满足以下两个条件才会触发这个问题:
- 可执行程序是x86_64架构(编译成arm64架构就不会有异常)
- 程序放在NFS挂载的目录里(放在本地APFS目录下调试完全正常)
测试用的极简代码:
#include <iostream> int main() { std::cout << "Hello, World!\n"; return 0; }
可行的解决办法
- 把程序移到本地APFS目录调试:NFS挂载目录对x86_64程序的签名验证有特殊限制,复制到本地磁盘后再用lldb调试就能正常运行。
- 直接编译成arm64架构:如果不需要兼容x86_64,编译时给clang加
-arch arm64参数生成arm64程序,就算放在NFS目录也能正常调试。 - 调整NFS挂载参数:挂载NFS时尝试添加
noacl参数关闭ACL权限检查,部分场景下能绕过权限验证问题。
内容的提问来源于stack exchange,提问作者User 10482
相关产品推荐
相关产品推荐

