如果我在内存中有地址,如何查找变量?

时间:2009-04-05 17:18:20

标签: objective-c xcode

在我的应用程序中,我得到一个例外:MyApp(38431,0xa004ffa0) malloc: *** error for object 0xa08be760: pointer being freed was not allocated

XCode有没有办法告诉我这个指针在哪里?我怎样才能找到问题所在?

我知道我可以输入信息行* [地址],它可以显示该行的位置。但现在它对我不起作用。

如何获取抛出异常的变量的行或名称?

提前谢谢你, 伊利亚安德

3 个答案:

答案 0 :(得分:5)

你在不调用malloc()的情况下调用free()。寻找未初始化的指针。如果您正在使用调试器(gdb),则应该能够为“backtrace”键入“bt”,这将在错误发生时显示堆栈。

答案 1 :(得分:3)

在gdb中尝试

bt

获取有关错误发生时间的更多信息。尝试释放未分配的内存是一个常见的错误,gdb + xcode提供了许多工具来帮助您找出问题所在。

答案 2 :(得分:2)

您应该能够设置一个malloc_error断点,这会导致您的程序在打印出相关邮件时中断。

您还可以使用以下方法从地址中找到分配点:

  1. MallocStackLogging, MallocStackLoggingNoCompact环境设置为1。
  2. 运行程序,一旦打印出来自shell的行malloc_history,就可以找到分配的堆栈跟踪:malloc_history <pid> <addr>