【问题标题】:Set conditional breakpoint for certain thread only in Xcode/LLDB仅在 Xcode/LLDB 中为某些线程设置条件断点
【发布时间】:2013-01-02 04:46:20
【问题描述】:

我正在使用一些 GCD 代码来分派一堆类似的异步块。我想通过单步调试其中一个块,所以我在块顶部附近的某处设置了一个断点,但是每次提交新块时调试器都会命中断点,所以我从来没有设法单步执行块,我只是在同一行上交换不同的线程。

我的问题是如何设置断点以使其以某个线程为条件?即它应该只在线程 4 上执行时触发?

编辑

我应该补充一点,我的块的代码非常耗时,因此调度程序在块内的下一行可以执行之前切换到另一个线程,并且轮到另一个新调度的 GCD 块,触发相同的断点。

【问题讨论】:

    标签: xcode llvm lldb


    【解决方案1】:

    我认为这不会通过 Xcode 断点 UI 公开,但在 lldb 中,您可以修改断点,使其仅在 (1) 线程名称匹配、(2) 调度队列名称匹配、(3) 线程 ID 时触发匹配,或 (4) 线程索引号匹配。您可以在创建断点 (breakpoint set) 时指定这些条件,也可以使用 breakpoint modify 将这些条件添加到现有断点。请参阅调试器控制台窗口中的help breakpoint modify 以获取允许的参数列表。

    【讨论】:

      【解决方案2】:

      要在 GDC 代码中调试,您可以使用 $gdb 调用块

      为了更好的想法。

      1. A Guide to Blocks & Grand Central Dispatch (and the Cocoa API's making use of them)

      2. Debugging with GDB

      还有How is dispatch_debug supposed to be used? 已经在那里指导。

      【讨论】:

        猜你喜欢
        • 2019-12-18
        • 2013-02-24
        • 1970-01-01
        • 2016-09-09
        • 2014-03-18
        • 2016-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多