You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OSX的LLDB中崩溃后如何保留进程并获取回溯?

在LLDB中保留崩溃进程以获取回溯的方法

在GDB中,启动程序的方式是:

gdb myprog

程序崩溃后直接执行bt就能获取调用回溯,但在OSX的LLDB中,部分崩溃(比如ObjC未识别选择器异常)会直接导致进程退出,无法用bt查看回溯。以下是解决办法:

方法1:捕获ObjC异常

如果遇到的是ObjC相关异常(比如你遇到的-[NSTaggedPointerString setObject:forKey:]未识别选择器),可以提前设置ObjC异常断点,让LLDB在异常抛出时暂停进程:

break set -E objc

设置后启动程序,当异常触发时LLDB会自动暂停,此时执行bt就能拿到完整的调用回溯。

方法2:修改LLDB对终止信号的处理

进程崩溃通常会触发SIGABRT信号,LLDB默认会让进程退出,你可以修改这个信号的处理规则,让进程收到信号时暂停而非退出:

process handle -s false -n false -p true SIGABRT

这条命令的含义是:

  • -s false:收到信号时不停止LLDB本身
  • -n false:不通知进程(让进程暂停)
  • -p true:收到信号时暂停进程

设置完成后启动程序,进程崩溃时会被LLDB挂起,此时执行bt即可获取回溯。

你的调试会话示例

你提供的调试会话如下:

Igors-MacBook-Air:toolbar igorkorot$ lldb toolbar.app/
(lldb) target create "toolbar.app/"
Current executable set to 'toolbar.app/' (x86_64).
(lldb) break set -f toolbar.mm -l 1189
Breakpoint 1: where = libwx_osx_cocoau_core-3.3.0.0.0.dylib`wxToolBar::Realize() + 19 at toolbar.mm:1189, address = 0x00000000001c92e3
(lldb) run
Process 55323 launched: '/Users/igorkorot/customtoolbar/buildC11/samples/toolbar/toolbar.app/Contents/MacOS/toolbar' (x86_64)
2023-07-05 23:15:26.708214-0500 toolbar[55323:5146343] -[NSTaggedPointerString setObject:forKey:]: unrecognized selector sent to instance 0x74756f624155
Unhandled unknown exception; terminating the application.
Process 55323 exited with status = 255 (0x000000ff) 

如果在run前设置上述的ObjC异常断点或修改SIGABRT处理,就能在异常触发时暂停进程,获取崩溃回溯。你提到重新编译程序及依赖库后恢复正常,这说明问题可能源于编译产物的一致性问题,重新构建通常能解决这类问题。

内容的提问来源于stack exchange,提问作者Igor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:43:42