我正在编写一个Cocoa应用程序的问题。它必须解析每小时更新的带时间戳的文件,并且在测试期间,由于分段错误,它会在晚上11:45左右持续崩溃。我假设我必须发送一个已经解除分配的对象。 Xcode安装提供了哪些工具来跟踪对象分配,并且(希望)告诉我,我是否正在发送已解除分配的对象?
我正在使用Mac OS X 10.5。
答案 0 :(得分:9)
我会推荐以下内容:
NSZombieEnabled
监控何时将消息发送到已解除分配的NSObject 答案 1 :(得分:0)
我这样做的方法是使用名为gdb
的命令行工具。 Here是有关如何使用它的教程。你必须学习它的一些命令,但一旦你这样做,几乎是一种乐趣。
注意:gbd
可用于C,C ++和Objective-C程序。
答案 2 :(得分:0)
您是否在gdb下运行该程序?这应该允许您在SIGSEGVs时检查堆栈和变量。
要跟踪分配,请使用malloc_history。这需要设置MallocStackLogging
环境变量。
答案 3 :(得分:0)
快速点:使用解除分配的内存位置通常会导致EXC_BAD_ACCESS
异常。如果这是你看到的崩溃原因那么你认为这是一个解除分配问题是正确的。
答案 4 :(得分:0)
在Xcode的调试器(顶部有GUI的gdb)中运行它并重现崩溃。然后,查看堆栈跟踪。
对已释放的对象进行消息传递通常具有objc_msgSend中的顶部框架。接下来的步骤是使用NSZombieEnabled运行应用程序并重现崩溃;僵尸会认出自己。