Xcode 12.5.1下捕获SIGINT信号失败的问题如何解决?
Xcode下lldb无法触发SIGINT自定义处理的解决方案
- 触发方式错误是核心原因
Xcode自带调试控制台的Ctrl+C快捷键默认被lldb自身占用,作用是中断调试器执行流程,不会将SIGINT信号转发给被调试的目标程序,因此哪怕你配置了信号处理规则也无法触发自定义逻辑,你的C++信号处理代码本身没有语法或逻辑错误。 - 两种可行的测试方法
- 脱离Xcode运行:编译得到可执行文件后,打开系统终端手动运行程序,按下
Ctrl+C即可触发自定义的sigintHandler逻辑 - lldb调试环境下测试:
- 程序在Xcode中启动运行后,打开终端执行
ps aux | grep 你的程序名称查询进程PID - 再执行
kill -SIGINT 查到的PID,即可将SIGINT信号发送给被调试程序
- 程序在Xcode中启动运行后,打开终端执行
- 脱离Xcode运行:编译得到可执行文件后,打开系统终端手动运行程序,按下
- lldb配置修正与优化
你执行的两条配置命令逻辑正确,可以合并为一条命令简化操作:
各参数含义:process handle SIGINT -s false -p true-s false:lldb收到SIGINT时不要暂停目标进程-p true:将SIGINT信号转发给目标程序处理
如果需要每次启动lldb都自动加载该配置,可以将上述命令写入用户根目录下的.lldbinit文件,无需每次调试手动输入。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

