Xcode 理解如何分析调用栈

Posted

技术标签:

【中文标题】Xcode 理解如何分析调用栈【英文标题】:Xcode understanding how to analyze the call stack 【发布时间】:2012-06-21 10:54:05 【问题描述】:

我使用的是 Xcode 4.3.1,但我不太明白如何使用控制台来通过调用堆栈。在我的代码中,我有多行调用一个特定的动作,并且在这个动作中有一个失败的断言。从输出中我只能看到断言失败消息和调用调用堆栈的对象的地址(至少我猜是这样)。但是我无法浏览并查看我的类的哪一行代码调用了导致断言的操作(有点像你可以从 Eclipse 分析堆栈跟踪)。是否有一些相关的教程可以解释这一点?

这是我从班级的多行调用的操作:

   [[CCActionManager sharedManager] addAction:[CCSequence actions:fadeAction, nil] target:source paused:NO]; 

我知道它会引发断言,但我无法从控制台输出中了解调用此方法的哪些行会导致这种情况。

这是我的控制台输出:

*** Assertion failure in -[CCActionManager addAction:target:paused:], /Users/user/Desktop/SourceCode - Backups/MyApp/MyApp/libs/cocos2d/CCActionManager.m:162
2012-06-21 12:40:54.761 MyApp[4148:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Argument target must be non-nil'
*** First throw call stack:
(0x338e08bf 0x303d41e5 0x338e07b9 0x311273b3 0xdc3b 0x5fbe5 0x66d2b 0x338e3814 0x3383e7e1 0x1afbb 0x1c39b 0x1981f 0x3383a435 0x435a7 0x43277 0x44aed 0x3128550f 0x31284f01 0x3126b4ed 0x3126ad2d 0x37fa9df3 0x338b4553 0x338b44f5 0x338b3343 0x338364dd 0x338363a5 0x37fa8fcd 0x31299743 0x58b9b 0x20e4)

【问题讨论】:

【参考方案1】:

Apple 对此有技术说明 - TN2151。特别是关于符号化崩溃报告的部分。

使用应用程序的 .dSYM 文件,您可以将堆栈地址(那些十六进制数字)转换为以更易读的格式从源调用。

【讨论】:

谢谢.. 我阅读了注释,然后搜索 Sumbolication 软件以读取 .dSYM 文件并在 ***.com/questions/3832900/… 上找到了一个很好的解释我现在会尝试但同时我接受答案,因为我想想回答我的问题。谢谢!

以上是关于Xcode 理解如何分析调用栈的主要内容,如果未能解决你的问题,请参考以下文章

C函数调用过程原理及函数栈帧分析(转)

网络协议栈源码分析

第四章 Activity和Activity调用栈分析 系统信息与安全机制 性能优化

函数调用过程原理及栈帧分析

内存分析

《你不知道的JS(中卷)》this详解