哪里有关于如何正确使用Xcode调试器的好教程?

时间:2009-09-02 00:07:51

标签: xcode debugging

主题说这一切真的......有没有适合Xcode调试器的好教程?我找到了一些东西,但没有什么全面的或足够深的东西。我现在的问题是这个......

#0  0x90d9c688 in objc_msgSend
#1  0x30506515 in NSPopAutoreleasePool
#2  0x30901697 in _UIApplicationHandleEvent
#3  0x32046375 in PurpleEventCallback
#4  0x30245560 in CFRunLoopRunSpecific
#5  0x30244628 in CFRunLoopRunInMode
#6  0x308f930d in -[UIApplication _run]
#7  0x309021ee in UIApplicationMain
#8  0x00001ff8 in main at main.m:14

......结合这个......

0x90d9c688  <+0024>  mov    0x20(%edx),%edi

......而这......

EXC_BAD_ACCESS

......没有多大帮助。或者说,真的。我正在尝试评论代码行,必须有更好的方法。

由于

更新:我想我的发泄可能会让真正的问题分散注意力,尽管提示有助于解释一些事情。我真正得到的不仅仅是对上述内容的解释,而是一般使用调试器。我通常会遇到的问题是:

  • 当我跨过或进入时,为什么调试器有时会从源代码视图转到(我假设的)汇编代码?有没有办法让我一直同时看到两个?
  • 我是否应该在汇编代码中寻找任何具体内容,或者在特定情况下可以提供哪些帮助?
  • 看起来断点允许操作,所以我很好奇如何使用它而不是用NSLog语句来编写代码。

我知道这些内容很广泛,可能应该单独询问,但我不想把这些可能已经在其他地方记录过的主题弄乱到SO空间。

我还注意到这里有一个几乎重复的问题:What are some Objective-c debugging tips?

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

崩溃在Apple的代码中(这就是为什么调试器没有向您显示源代码),并且它的原因实际上是在其他地方 - 您已经发布了一个应该由自动释放池释放的临时对象。这导致自动释放池崩溃。

你应该只发布以下对象:

  • 您使用retain
  • 保留了自己
  • 仅由initcopynew方法返回(以及包含这些字词的变体)

不幸的是,你无法从调试器中学到这一点,只能从文档和经验中学到......

您可以使用Clang Analyzer查找此类错误(有时)。

答案 2 :(得分:2)

这是关于XCode 4调试器功能的great tutorial

关于为什么调试器从源代码视图进入汇编视图的问题... 当代码的执行进入不属于源代码文件的类时,它进入汇编视图......例如。当你踩到你使用的框架的一部分代码时,比如UIKit。