Xcode调试Unity Editor时断言失败不停止执行该如何解决?
Unity Editor原生插件开发Xcode断言失败不中断问题解决方案
Unity Editor默认自带全局信号捕获逻辑,会优先拦截断言、校验失败触发的SIGABRT信号,直接走内置崩溃上报流程,因此不会将信号抛给Xcode调试器,导致进程直接结束。按照以下步骤配置即可实现断言触发时自动暂停:
1. 关闭Unity内置崩溃上报
- 打开Unity Editor,进入
Edit > Project Settings > Player设置页 - 切换到macOS平台标签,展开
Other Settings分组 - 取消勾选Enable Crash Reporter选项,关闭Unity自带的崩溃信号拦截逻辑
注意:修改完成后需重启Unity Editor生效
2. 配置Xcode信号/异常捕获规则
2.1 通用异常断点配置
- 打开你的原生插件Xcode工程,点击顶部菜单
Debug > Breakpoints > Create Exception Breakpoint - 右键新建的异常断点,选择
Edit Breakpoint:- 异常类型选择
All,同时勾选C++、Objective-C选项 - 点击
Add Action,选择Debugger Command类型,输入命令process handle SIGABRT -n true -s true -p false,强制调试器捕获SIGABRT信号时暂停进程
- 异常类型选择
2.2 C/C++/Objective-C++断言专属断点
- 点击顶部菜单
Debug > Breakpoints > Create Symbolic Breakpoint - 在
Symbol输入框填入__assert_rtn,这是macOS平台C系列断言触发的底层调用符号,命中后会直接暂停在断言所在代码行
3. Xcode系统校验(如Metal API Validation)专属配置
如果需要捕获Xcode自带的API校验报错,新增额外符号断点即可:
- 新建符号断点,
Symbol输入框填入MTLReportFailure - 触发Metal API校验错误时,Xcode会直接暂停在报错调用栈位置,可查看具体错误原因
4. 验证效果
配置完成后正常从Xcode启动/附加Unity Editor进程即可,触发任意断言或校验错误时,Xcode都会自动暂停,展示对应代码行、调用栈和上下文信息,不会直接触发进程崩溃。
内容的提问来源于stack exchange,提问作者Devaniti
相关产品推荐
相关产品推荐

