iOS指南系列:如何解决奔溃问题-深入调试
2012-04-14 21:52
423 查看
(lldb)
po $eax
(unsigned int) $1 = 112518480 Receiver (<MainViewController: 0x6d80ec0>) has no segue with identifier 'ModalSegue'
一上来就看到这两行东西,是不是觉得有点用,但又莫名其妙呢
与调试器交朋友
Making Friends With the Debugger
对于最近的这个crash点,代码如下:
在调试窗格中没有任何消息。您可以像以前那样,按继续执行程序“按钮,但你也可以在调试器中键入一个命令来得到错误信息。这样做的好处是可以留在同一个地方暂停应用程序。
如果你运行这个模拟器,你可以(lldb)提示符后键入以下内容:
LLDB is the default debugger for Xcode 4.3 and up.
如果你使用的是旧版本的Xcode,那么你有GDB调试器(这对linux开发人员而言,很熟悉的)。他们采用同样的一些基本的命令,所以,如果您的Xcode提示说(GDB),而不是(lldb),你应该仍然能够按照这个命令没有问题。 (顺便说一下,你可以切换在Xcode编辑器之间的不同调试,可以通过project
schema编辑选项,选择debugger,来个本地的图更能说明问题:)
po命令代表“打印对象” print object(会不会让你想起.net clr debug中的 !do !pe=print exception)。符号$ EAX是指CPU寄存器之一。在异常的情况下,该寄存器将包含一个指针的NSException对象。注:$EAX只适用于模拟器,如果你在调试设备,你需要使用寄存器$
R0。
例如,如果键入:
你也可以看到如下的输出
数字并不重要,但很明显,你在这里处理与NSException对象。
你可以调用这个对象的任何从NSException方法。例如:
这会给你异常的名称,在这种情况下NSInvalidArgumentException,
这会给你 error message:
Note: When
you just do “po $eax”, it will call the “description” method on the object and print that, which in this case also gives you the error message.
这样解释这是怎么回事:你试图执行名为“ModalSegue”的 Segue ,但显然在MainViewController没有Segue公司。
storyboard并不表明Segue公司是一个存在,是你忘了设置其标识符,这是一个非典型的错误(往往是你拼写错了):
改变Segue的标识符“ModalSegue。”再次运行程序, - 等待 -
点选按钮。哇,这次没有再的崩溃!但这里是我们的下一个部分问题 - 我们认为显示表不应该是空的!
Why?
译者按惯例总结一下:
1. 适用storayboard后,要特别注意其中的设置
2. 了解gdb/lldb调试命令真的是又帮助的(当然了解windows debugger也有帮助:))
po $eax
(unsigned int) $1 = 112518480 Receiver (<MainViewController: 0x6d80ec0>) has no segue with identifier 'ModalSegue'
一上来就看到这两行东西,是不是觉得有点用,但又莫名其妙呢
与调试器交朋友
Making Friends With the Debugger
对于最近的这个crash点,代码如下:
[self performSegueWithIdentifier:@"ModalSegue" sender:sender]; |
如果你运行这个模拟器,你可以(lldb)提示符后键入以下内容:
(lldb) po $eax |
如果你使用的是旧版本的Xcode,那么你有GDB调试器(这对linux开发人员而言,很熟悉的)。他们采用同样的一些基本的命令,所以,如果您的Xcode提示说(GDB),而不是(lldb),你应该仍然能够按照这个命令没有问题。 (顺便说一下,你可以切换在Xcode编辑器之间的不同调试,可以通过project
schema编辑选项,选择debugger,来个本地的图更能说明问题:)
po命令代表“打印对象” print object(会不会让你想起.net clr debug中的 !do !pe=print exception)。符号$ EAX是指CPU寄存器之一。在异常的情况下,该寄存器将包含一个指针的NSException对象。注:$EAX只适用于模拟器,如果你在调试设备,你需要使用寄存器$
R0。
例如,如果键入:
(lldb) po [$eax class] |
(id) $2 = 0x01446e84 NSException |
你可以调用这个对象的任何从NSException方法。例如:
(lldb) po [$eax name] |
(lldb) po [$eax reason] |
(unsigned int) $4 = 114784400 Receiver (<MainViewController: 0x6b60620>) has no segue with identifier 'ModalSegue' |
you just do “po $eax”, it will call the “description” method on the object and print that, which in this case also gives you the error message.
这样解释这是怎么回事:你试图执行名为“ModalSegue”的 Segue ,但显然在MainViewController没有Segue公司。
storyboard并不表明Segue公司是一个存在,是你忘了设置其标识符,这是一个非典型的错误(往往是你拼写错了):
改变Segue的标识符“ModalSegue。”再次运行程序, - 等待 -
点选按钮。哇,这次没有再的崩溃!但这里是我们的下一个部分问题 - 我们认为显示表不应该是空的!
Why?
译者按惯例总结一下:
1. 适用storayboard后,要特别注意其中的设置
2. 了解gdb/lldb调试命令真的是又帮助的(当然了解windows debugger也有帮助:))
相关文章推荐
- iOS指南系列:如何解决奔溃问题-深入调试
- iOS指南系列:如何解决内存问题 深入调试 结尾篇
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- iOS指南系列:如何解决奔溃问题-关于内存访问
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- iOS指南系列:如何解决奔溃问题-关于内存访问续2
- iOS指南系列:如何解决奔溃问题
- iOS指南系列:如何解决奔溃问题-关于内存访问
- iOS指南系列:如何解决奔溃问题 .
- iOS指南系列:如何解决奔溃问题
- iOS指南系列:如何解决奔溃问题
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- 如何解决eclipse生成的apk无法在真机上调试安装的问题
- 如何解决RK3168或者RK系列MASKROM的问题
- Debian系统网卡调试出问题,无线网卡提示device not managed如何解决?
- 如何解决VS.NET无法调试项目问题?
- iOS 中C如何调用Objective c的代码更新界面问题解决
- iOS开发之—— XCODE真机调试设备连接一直忙碌如何处理!(真机调试各种错误提示解决)
- 如何解决visual interdev的调试问题
- 如何解决visual interdev的调试问题