【问题标题】:Is there a way to enable/disable a breakpoint other than by its ID?除了 ID 之外,有没有办法启用/禁用断点?
【发布时间】:2015-06-30 20:37:52
【问题描述】:

使用 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

【问题讨论】:

    标签: c++ xcode lldb


    【解决方案1】:

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

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

    【讨论】:

    • 很高兴知道;不幸的是,我被困在 XCode 4.6 上。 (另外,我正在使用 XCode 设置断点,尽管我可能会为 __cxa_throw 设置一个例外。)
    • @celticminstrel s/4.6/6.4/g
    • 不。 4.6. XCode 5 及更高版本需要 Mountain Lion。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多