macOS Sonoma 14.0下代码签名Python脚本及Intel Python以调试段错误
解决macOS Sonoma下Intel OneAPI Python段错误调试的签名问题
先确认签名是否真正生效
- 先检查Python可执行文件的签名状态,执行:
codesign -dv --verbose=4 /path/to/oneapi/python3.9/bin/python3 - 查看输出里的
Authority字段,必须显示你创建的自签名证书名称。如果没出现,说明签名没成功,重新执行签名命令(记得加--deep递归签所有依赖库):codesign -s "你的自签名证书名称" --force --deep /path/to/oneapi/python3.9/bin/python3 - 注意:OneAPI Python的依赖库都在安装目录下,只签主可执行文件没用,
--deep参数必须加上,否则调试工具还是会报签名错误。
调整系统调试权限
- 打开「系统设置」→「隐私与安全性」→「完全磁盘访问权限」,把
lldb和gdb添加到列表里并勾选权限 - 切换到「开发者工具」栏目,确认
lldb和gdb被允许作为开发者工具运行 - 重启终端或者调试工具,让权限设置生效
用lldb调试的正确流程(macOS更推荐lldb而非gdb)
- 启动lldb并指定Python路径:
lldb /path/to/oneapi/python3.9/bin/python3 - 在lldb命令行里运行你的脚本:
run your_script.py - 段错误触发后,输入
bt就能拿到完整的调用回溯信息 - 如果还是遇到签名拦截,临时关闭系统完整性保护(SIP)试试:
- 重启Mac,按住
Command+R进入恢复模式 - 打开终端,执行
csrutil disable,然后重启 - 调试完成后,记得再进入恢复模式执行
csrutil enable重新打开SIP(不建议长期关闭)
- 重启Mac,按住
无需调试工具的替代方案:用faulthandler直接输出回溯
- 在你的Python脚本开头添加以下代码:
import faulthandler faulthandler.enable() - 或者运行脚本前设置环境变量:
export PYTHONFAULTHANDLER=1 /path/to/oneapi/python3.9/bin/python3 your_script.py - 脚本触发段错误时,终端会直接打印出完整的调用栈回溯,不需要折腾调试工具的签名问题,这个方法最省心。
内容的提问来源于stack exchange,提问作者foutou_10
相关产品推荐
相关产品推荐

