【问题标题】:Help with Exception Breakpoint in XCode 4帮助 XCode 4 中的异常断点
【发布时间】:2011-10-28 21:04:17
【问题描述】:

我在 XCode 4 中设置了一个异常断点。它是否会因源自 Cocoa Touch 框架并由该框架处理的异常而中断? IE。调试器是否会停止所有异常,即使它们是框架的自然部分并由框架内部处理?

我的调试器不断停止,因为来自框架深处的看似无害的异常,我需要知道我是否可以安全地忽略它。

【问题讨论】:

    标签: xcode debugging exception xcode4


    【解决方案1】:

    异常断点就是:异常断点。这包括框架内的那些。它是谁的异常并不重要 - 如果它被引发,它应该中断。

    【讨论】:

    • 那么框架是否使用异常处理?框架会在哪些地方使用 try/catch/finally?框架内的异常是否一定有问题,或者其中一些是基础流程的一部分?
    • 框架会捕获一些异常,有时您想知道何时发生了静默捕获。
    【解决方案2】:

    如果您像我一样,有时您想忽略特定的异常(例如 Apple 的间歇性错误 CMMThrowExceptionOnError,Apple 几个月来都忽略了对我的错误报告提供任何反馈)

    所以,我不是很有效的解决方案是添加以下断点而不是“添加 C++ 异常断点...”

    从 gdb 命令行,输入 打破 __cxa_throw

    然后,在 XCode 断点编辑器中,将以下“调试器命令”添加到此断点。通过替换 $eip 的违规地址,您可以排除个人 断点的异常。

    silent
    # go up one stack frame silently
    up-silently
    # in my particular app, address of CMMThrowExceptionOnError is 0x9704d22e
    if ( $eip == 0x9704d22e )
       # echo gdb ignore exception\n
       #print $eip
       cont
    end
    

    如果您能设计出一个不会产生调试器脚本开销的更好解决方案,请告诉我。

    【讨论】:

      【解决方案3】:

      关于 Xcode 4.3 中 defat 使用的 LLDB 的简短说明 命令有不同的语法。

      set $eip = xxxx
      

      现在

      reg write tip 0x006373ec
      

      完整的命令图可在http://lldb.llvm.org/lldb-gdb.html获得

      【讨论】:

        猜你喜欢
        • 2013-05-28
        • 2012-12-25
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 2015-06-14
        • 2015-05-03
        • 2013-07-22
        相关资源
        最近更新 更多