【发布时间】:2011-10-28 21:04:17
【问题描述】:
我在 XCode 4 中设置了一个异常断点。它是否会因源自 Cocoa Touch 框架并由该框架处理的异常而中断? IE。调试器是否会停止所有异常,即使它们是框架的自然部分并由框架内部处理?
我的调试器不断停止,因为来自框架深处的看似无害的异常,我需要知道我是否可以安全地忽略它。
【问题讨论】:
标签: xcode debugging exception xcode4
我在 XCode 4 中设置了一个异常断点。它是否会因源自 Cocoa Touch 框架并由该框架处理的异常而中断? IE。调试器是否会停止所有异常,即使它们是框架的自然部分并由框架内部处理?
我的调试器不断停止,因为来自框架深处的看似无害的异常,我需要知道我是否可以安全地忽略它。
【问题讨论】:
标签: xcode debugging exception xcode4
异常断点就是:异常断点。这包括框架内的那些。它是谁的异常并不重要 - 如果它被引发,它应该中断。
【讨论】:
如果您像我一样,有时您想忽略特定的异常(例如 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
如果您能设计出一个不会产生调试器脚本开销的更好解决方案,请告诉我。
【讨论】:
关于 Xcode 4.3 中 defat 使用的 LLDB 的简短说明 命令有不同的语法。
set $eip = xxxx
现在
reg write tip 0x006373ec
完整的命令图可在http://lldb.llvm.org/lldb-gdb.html获得
【讨论】: