【问题标题】:How to print exception on exception breakpoint in Xcode 6?如何在 Xcode 6 中的异常断点上打印异常?
【发布时间】:2015-05-03 02:57:36
【问题描述】:

我的应用程序崩溃了,它似乎被捕获在异常断点中(这是有道理的),但我无法找到崩溃的原因。

这是我尝试过的:

  • po $eax
  • po $rax
  • po $r0
  • po *(id *)($esp + 4)

对于上述所有尝试,我收到以下错误:

error: use of undeclared identifier '$<register name>' error: 1 errors parsing expression

我也找到了这个LLDB Command Guide,但没有找到任何有用的东西(有点混乱,你不知道你在找什么)。

如何打印崩溃的原因?

我正在运行 iOS 8、lldb 和 Xcode 6。

编辑

现在我明白为什么找不到这些寄存器了。这是我运行 register read 时得到的结果:

General Purpose Registers:
x0 = 0x0000000000000001
x1 = 0x0000000000000000
x2 = 0x0000000000000000
x3 = 0x0000000195531a74  libsystem_malloc.dylib`nano_free_definite_size
x4 = 0x0000000000000000
x5 = 0x0000000000000000
x6 = 0x676e697274534643
x7 = 0x0000000000000f80
x8 = 0x00000001569d5a10
x9 = 0x0000000000000000
x10 = 0x000001a574056051
x11 = 0x0000000000000001
x12 = 0x000000000000003d
x13 = 0x0000000000000000
x14 = 0x0000000000000001
x15 = 0x0000000000000052
x16 = 0x0000000194d6e510  libobjc.A.dylib`object_setClass
x17 = 0x0000000000000000
x18 = 0x0000000000000000
x19 = 0x00000001702823f0
x20 = 0x0000000174038eaa
x21 = 0x000000019130a778  "release"
x22 = 0x0000000000000000
x23 = 0x0000000174246d20
x24 = 0x0000000174038ea0
x25 = 0x00000001895d22fa  "forwardingTargetForSelector:"
x26 = 0x00000001745186a0
x27 = 0x0000000000000000
x28 = 0x00000000a40008ff
fp = 0x0000000105757720
lr = 0x000000018462a440  CoreFoundation`___forwarding___ + 968
sp = 0x00000001057576c0
pc = 0x000000018462a440  CoreFoundation`___forwarding___ + 968
cpsr = 0x20000000

如您所见,这些是使用的寄存器,不包含我之前尝试过的任何寄存器。但是,我仍然找不到异常。

【问题讨论】:

标签: ios objective-c xcode


【解决方案1】:

您只需输入:

po $arg1

欲了解更多信息,请查看:How to replace NSUncaughtExceptionHandler with definition in Breakpoint navigator?

【讨论】:

  • 在问题中没有$arg1 的选项。因此,请准确检查您在异常断点中定义的内容。我的意思是你定义了什么动作?请附上屏幕好吗?
  • 好的,它在这里不起作用:stackoverflow.com/questions/31403719/… 和这里:natashatherobot.com/xcode-debugging-trick 通常 - 它甚至找不到 $arg1 所以它不会在你尝试访问它时起作用
  • xCode 7 beta x(最新版本)也需要 OSX 10.11,它也是 beta。我是否必须安装一个不稳定版本的操作系统才能启用一项也适用于当前版本的功能?
  • 这非常有效,只要确保您选择了正确的堆栈帧(抛出异常的帧)。
【解决方案2】:

强调 Rickster 对上一个答案的评论:

确保选择正确的框架。

po $arg1 在调试导航器中选择最顶部的“机器代码”框架后为我工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2012-03-06
    • 2013-07-22
    • 2012-09-10
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多