【问题标题】:Break on _NSLockError() to debug ... How to?中断 _NSLockError() 以进行调试...如何?
【发布时间】:2010-11-20 22:48:31
【问题描述】:

在调试过程中,控制台总是向我吐出一条错误消息:“Break on _NSLockError() to debug”

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

我该怎么做?

【问题讨论】:

    标签: xcode debugging


    【解决方案1】:

    使用 Xcode 4 GUI:

    1. 打开断点导航器(Command+6 或查看>导航器>显示断点导航器)
    2. 单击左下角的“+”并选择“添加符号断点...”
    3. 在符号字段中输入“_NSLockError”
    4. 在模块字段中输入“基础”
    5. 点击“完成”

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

    【讨论】:

      【解决方案2】:

      1/ 从菜单中选择 Build -> Build and Debug

      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 中运行它们更容易从 Terminal.app 调试我的二进制文件,即“gdb /path_to/App.app/Contents/MacOS/App”
      • 嗯...按我的方式做会容易得多,因为它将继续在调试会话中应用...
      • 命令 'b _NSLockError' 是相同的 lldb ...只是为了让这个答案与最近的 Apple 更改保持同步。
      【解决方案3】:

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

      1. 在 Xcode 中,Option-Command-B 打开 Breakpoints 窗口(或 Run>Show>Breakpoints)。
      2. 其中显示“双击符号”,双击...并粘贴到“_NSLockError”中。
      3. 单击窗口中的任何其他位置,您的新条目将自动更新(或手动添加)Module = "Foundation"(不带引号)
      4. Build & Go 现在,当您遇到自动检测到的死锁时,您将自动进入调试器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 2019-08-22
        • 1970-01-01
        • 2011-03-19
        • 2012-11-06
        • 1970-01-01
        • 2011-05-13
        相关资源
        最近更新 更多