lldb:在异常上设置断点(相当于gdb的catch throw)

61

我正在尝试使用lldb进行C++调试,希望在异常抛出时停止程序运行,就像gdb的catch throw命令一样,但是在lldb文档中找不到类似的命令。

3个回答

81

使用breakpoint set -E c++来在所有异常处中断,使用breakpoint set -F std::range_error来在特定异常处中断。


62

在Xcode中,您可以设置异常断点(查看>导航器>显示断点导航器,在断点列表窗口底部点击+按钮添加新断点)。

如果您正在使用命令行lldb,请在C++异常抛出时放置一个__cxa_throw断点,在Objective-C异常抛出时放置一个objc_exception_throw断点。

对于所有的C++异常:break set -E C++


16
针对所有 C++ 异常:打破设置 -E c++。 - plaisthos
1
啊,我错过了设置断点的-E选项!谢谢你指出来。 - Jason Molenda
3
“-F”和“-E”版本对我不起作用,但是“breakpoint -n __cxa_throw”可以(适用于所有异常),以及“breakpoint -n <exception-name>”(适用于特定异常)。 - Anthony Hall
1
如果您想要使用Objective-C异常,也可以使用“-E objc”。 - Maurice Gilden
break set -E c++ 对我没用(可能是因为我使用的是真正的GNU g++而不是Apple的clang++?),但 break set -n __cxa_throw 有效。@AnthonyHall的评论缺少 set - Mark Gates

0

我认为breakpoint set -w <boolean>是正确的答案,你可以使用help breakpoint set查看文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接