有序调用堆栈 - 使用Instruments Time Profiler?

时间:2011-10-17 21:36:04

标签: objective-c ios instruments callstack

我正在尝试修复iOS应用中的随机发生的崩溃(EXC_BAD_ACCESS(SIGSEGV)KERN_INVALID_ADDRESS位于0xe104019e)。该应用程序同时执行许多操作 - 使用NSURLConnection加载数据,重绘具有许多嵌套UIViews的复杂布局,绘制UIImages,在本地磁盘上缓存下载的文件,在本地缓存中查找文件可用性等。这些操作是分布式的进入许多线程,当崩溃发生时,我完全混淆了它之前的确切步骤。

我想使用一种方法来按照发生顺序跟踪调用堆栈,并查看在崩溃前的最后1-5ms内调用了哪些对象方法,然后我可以隔离产生崩溃的错误。

乍一看,仪器中的Time Profiler提供了这种具有许多细节的跟踪能力,但是采样的调用堆栈似乎是以随机顺序呈现 - 或者我可能错了......

是否有一种方法可以告诉我执行顺序究竟发生了什么?

1 个答案:

答案 0 :(得分:0)

1)启用僵尸运行,并删除所有编译器和静态分析器警告。

2)这可能是一个线程问题,您无法正确保护共享数据。

仪器在线程排序/过滤方面非常强大,但是没有确切的模板可用于您要完成的任务。

如果您可以将问题减少到一小部分对象类型,那么如果添加分配工具并启用引用计数记录,则可以根据引用计数执行。