是否有一种方法可以启用/禁用除ID之外的断点

Is there a way to enable/disable a breakpoint other than by its ID?

本文关键字:ID 断点 启用 方法 一种 是否      更新时间:2023-10-16

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

上下文:我使用BoostSpirit(经典)来解析文件,作为解析的一部分,可能会抛出许多异常,然后捕获。当抛出异常时中断是没有用的,但我希望当抛出Spirit之外的异常时中断。

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

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

我发现了这个问题,看起来它可能能够实现类似的结果,尽管我更喜欢启用/禁用方法,因为它更灵活(例如,允许您忽略代码中某些区域的断点,但不能忽略其他区域的断点)。不过,我也不完全清楚当Xcode调用lldb时,是否需要做任何额外的事情来让它使用.lldb_init

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

Xcode将始终读取~/.lldinit文件,但它必须位于主目录中,并且文件名没有下划线。事实上,它比这更复杂一点,如果你有一个名为~/.lldinit Xcode的文件,那么Xcode会使用这个文件,而不是.lldinit。这样,如果你想让一些命令在命令行lldb中运行,而另一些在Xcode中运行,你可以安排它。