有没有办法启用/禁用除其ID之外的断点?

时间:2015-06-30 20:37:53

标签: c++ xcode lldb

使用LLDB(版本179.5,带有XCode 4.6.3),是否有一个命令可用于通过指定符号名称而不是数字ID来禁用断点?

上下文:我正在使用Boost.Spirit(经典)来解析文件,并且作为解析的一部分,可能会抛出许多异常然后被捕获。在抛出异常时中断是没有用的,但是当异常被抛出Spirit之外时我想要破解。

我可以使用条件断点获得我想要的单次运行行为 - 首先,我使用break list来查找__cxa_throw断点的数字ID。假设结果是2。然后我可以在调用Spirit之前设置断点,在评估后将其设置为继续,并添加LLDB操作break disable 2。然后我在Spirit返回后用break enable 2设置另一个类似的断点。

问题是,我不能依赖数字ID在程序的多次调用中保持相同。我希望每次运行程序时都能设置一些不需要我修复它的东西。

我发现this question看起来似乎可以达到类似的结果,但我更喜欢启用/禁用方法,因为它更灵活(例如,允许你忽略某些区域的断点)你的代码,但不是其他人)。我还不完全清楚是否需要做任何额外的事情来让lldb在被Xcode调用时使用.lldb_init

1 个答案:

答案 0 :(得分:0)

在Xcode 7(或当前的TOT lldb.llvm.org lldb)的lldb中,您可以在命令行中为断点命名断点。然后你可以启用&按名称禁用断点。如果您在.lldbinit中设置断点,则可以使用名称&参考名称。但是,如果您在Xcode中创建断点,这对您没有多大帮助,因为它还没有设置名称的功能。

Xcode将始终读取〜/ .lldbinit文件 - 但它必须位于您的主目录中,文件名没有下划线。实际上它有点复杂,如果你有一个名为〜/ .lldbinit-Xcode的文件,那么Xcode将使用它而不是.lldbinit。这样,如果你想在命令行lldb和Xcode中运行某些命令,你可以安排。