2015-06-30 40 views
0

使用LLDB(版本179.5,XCode 4.6.3),是否有一个命令可以通过指定符号名称而不是数字ID来禁用断点?有没有办法启用/禁用断点以外的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

回答

0

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

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

+0

这很了解;不幸的是,我被卡在XCode 4.6上。 (另外,我正在使用XCode创建断点,尽管我可能会为__cxa_throw之一创建一个例外。) – celticminstrel

+0

@celticminstrel s/4.6/6.4/g –

+0

不可以。 4.6。 XCode 5和更高版本需要Mountain Lion。 – celticminstrel

相关问题