Xcode 中断_NSLockError()以调试。。。如何?

Xcode 中断_NSLockError()以调试。。。如何?,xcode,debugging,Xcode,Debugging,在调试过程中,控制台总是向我发送一条错误消息:“断开\u nslockeror()进行调试” 我的假设是:在XCode中,我必须出现某个breackpoint,以便调试器在发生此错误时停止 如何进行此操作?1/从菜单中选择构建->构建和调试 2/单击“GDB”图标-您将切换到“调试器控制台” 3/按Control+C中断二进制文件。您将得到gdb提示 4/键入“b_NSLockError”并在设置断点后继续执行 (gdb) b _NSLockError Breakpoint 8 at 0x911

在调试过程中,控制台总是向我发送一条错误消息:“断开\u nslockeror()进行调试”

我的假设是:在XCode中,我必须出现某个breackpoint,以便调试器在发生此错误时停止


如何进行此操作?

1/从菜单中选择构建->构建和调试

2/单击“GDB”图标-您将切换到“调试器控制台”

3/按Control+C中断二进制文件。您将得到gdb提示

4/键入“b_NSLockError”并在设置断点后继续执行

(gdb) b _NSLockError
Breakpoint 8 at 0x911db1a9
(gdb) c
Continuing.
5/您可以与GDB进行交互,就像它从控制台运行一样,即您可以再次按住Ctrl+C键并查看当前断点:

(gdb) info breakpo
Num Type           Disp Enb Address    What
8   breakpoint     keep y   0x911db1a9 <_NSLockError+9>
(gdb)信息包
Num Type Disp Enb地址什么
8断点保持y 0x911db1a9

要在XCode中为您的项目自动执行此操作:

  • 在Xcode中,Option-Command-B打开断点窗口(或运行>显示>断点)
  • 上面写着“双击符号”,双击。。。并粘贴到“\n锁定错误”
  • 单击窗口中的任何其他位置,您的新条目将自动更新(或手动添加),并使用Module=“Foundation”(不带引号)
  • Build&Go,当遇到自动检测到的死锁时,您现在将自动进入调试器
  • 使用Xcode 4 GUI:

  • 打开断点导航器(命令+6或视图>导航器>显示断点导航器)
  • 单击左下角的“+”并选择“添加符号断点…”
  • 在符号字段中输入“\n锁定错误”
  • 在模块字段中输入'Foundation'
  • 单击“完成”

  • 如上所述,调试器将破坏锁,从而导致死锁,因此您可以检查调用堆栈,并希望确定原始锁发生的位置。

    我有时发现,通过在GDB中运行Terminal.app来调试我的二进制文件更容易,即“GDB/path_to/app.app/Contents/MacOS/app”嗯。。。用我的方式做会容易得多,因为它将继续在调试会话中应用…命令'b\u nslockeror'与lldb相同。。。只是为了让这个答案与苹果最近的变化保持同步。