代码之家  ›  专栏  ›  技术社区  ›  mipadi

如何跟踪Cocoa应用程序中的分段错误?

  •  2
  • mipadi  · 技术社区  · 17 年前

    我写的可可应用程序有问题。它必须解析一个每小时更新一次的时间戳文件,在测试过程中,由于分段错误,它会在晚上11:45左右持续崩溃。我假设我必须发送一个已解除分配的对象。Xcode安装提供了哪些工具来跟踪对象分配,并(希望)告诉我是否正在发送已解除分配的对象的消息?

    5 回复  |  直到 17 年前
        1
  •  9
  •   fbrereto    17 年前

    我建议如下:

        2
  •  0
  •   Kredns    17 年前

    我这样做的方法是使用一个名为 gdb . Here 是关于如何使用它的教程。您将不得不学习它的一些命令,但一旦您学习,使用它几乎是一种乐趣。

    注: gbd 可以在C、C++、Objtovi-C程序中使用。

        3
  •  0
  •   Kredns    17 年前

    你在gdb下运行过这个程序吗?这应该允许您在它发出SIGSEGVs信号时检查堆栈和变量。

    要跟踪分配,请使用 malloc_history MallocStackLogging 要设置的环境变量。

        4
  •  0
  •   Matt Gallagher    17 年前

    快速要点:使用释放的内存位置通常会导致 EXC_BAD_ACCESS 例外如果这就是你看到的崩溃原因,那么你认为这是一个释放问题是正确的。

        5
  •  0
  •   Peter Hosey    17 年前

    在Xcode的调试器(上面有GUI的gdb)中运行它,并重现崩溃。然后,查看堆栈跟踪。

    消息传递解除分配的对象通常在objc_msgSend中具有顶部框架。然后下一步是在启用NSZombie的情况下运行应用程序并再现崩溃;僵尸会自我识别。