iPhone程序崩溃和编译器显示的堆栈报告完全没有用!

标签 iphone compiler-construction crash

大多数时候,当 Iphone 程序崩溃时,编译器会显示堆栈中充满了 no,但这些 no 对我来说没有任何意义。它很少指出问题可能出在哪里,而且大多数都是这些无用的“不”。如何确保当您的程序在开发/测试期间崩溃时,它会显示导致崩溃的位置?

最佳答案

我的 iPhone 开发生活很糟糕,直到我发现 NSZombieEnabled 。通过将此标志添加到可执行文件中,它将让您知道有问题的对象的名称,从而帮助您查看任何内存问题。

这是通过从不实际释放对象来实现的,而是通过将其包装为“僵尸”并在其中设置一个标志来表示它通常会被释放。这样,如果您尝试再次访问它,它仍然知道您犯错误之前的情况,并且通过这一点信息,您通常可以回溯以查看问题所在。

当调试器有时无法获取任何有用信息时,它在后台线程中特别有帮助。

非常重要的是要注意,但是,您需要 100% 确保这仅在您的调试代码中,而不是您的分发代码中。因为没有任何东西被发布,所以你的应用程序将会泄漏、泄漏、泄漏。为了提醒我这样做,我将此日志放入我的应用程序委托(delegate)中:

if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
  NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");

关于iPhone程序崩溃和编译器显示的堆栈报告完全没有用!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1444639/

相关文章:

iphone - MWPhotoBrowser iOS 7 奇怪的定位

C# 编译器与委托(delegate)构造函数的奇怪之处

C++ LinkedList 读访问冲突错误

c++ - 尝试打印变量。程序崩溃

iphone - 在 iPhone 上运行我的应用程序时图像模糊

ios - 呈现 UIImagePicker 时添加新窗口

iphone - UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么?

多个泛型类型的 Java 编译器错误

c# - 当两个重载具有相同的签名时调用构造函数重载

delphi - 调用库函数会占用堆栈。为什么?