5

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

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

编辑

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

4

2 回答 2

8

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

于 2013-01-18T21:09:58.007 回答
0

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

对同一件事有更好的想法..

  1. Blocks & Grand Central Dispatch 指南(以及 Cocoa API 的使用)

  2. 使用 GDB 进行调试

还有应该如何使用 dispatch_debug ?已经在那里指导。

于 2013-01-18T13:18:06.193 回答