仅在Xcode / LLDB中为某些线程设置条件断点

时间:2013-01-18 12:59:37

标签: xcode llvm lldb

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

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

修改

我应该补充一点,我的块的代码是非常耗时的,所以调度程序在块内的下一行可以执行之前交换到另一个线程,而另一个新安排的GCD块轮到它,触发相同的断点。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

要在GDC代码中调试,可以使用 $ gdb invoke-block

对此有更好的想法..

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

  2. Debugging with GDB

  3. 并且How is dispatch_debug supposed to be used?已经在那里指导。