【问题标题】:How to find a variable if I have its address in memory?如果我在内存中有变量的地址,如何找到变量?
【发布时间】:2010-10-17 16:28:45
【问题描述】:

在我的应用程序中出现异常:MyApp(38431,0xa004ffa0) malloc: *** error for object 0xa08be760: pointer being freed was not allocated

XCode 有没有办法告诉我这个指针在哪里?如何找到问题所在?

我知道我可以输入 info line*[address],它可能会告诉我该行的位置。但现在它对我不起作用。

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

提前谢谢你, 伊利亚

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

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

    【讨论】:

    • 如果他使用的是 Objective-C,他可能不会调用 malloc。他可能在错误的时间发布。
    • 是的;我不是 Obj C 大师。只是去例外。无论哪种方式,如果它不为空但很糟糕,则很可能是未初始化的指针。我想也可以是双重免费的,但这在 Obj C 中应该很难做到,对吧?
    【解决方案2】:

    在 gdb 中尝试

    bt
    

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

    【讨论】:

    • 你能告诉我这些工具是什么以及如何使用它们吗?也许你可以给我指出一篇有信息的文章或一本书?这对我来说确实是个问题 - 我必须花费数小时找出代码中的错误。
    【解决方案3】:

    您应该能够在malloc_error 处设置一个断点,这将导致您的程序在打印相关消息时中断。

    你也可以使用下面的方法,从地址中找到分配点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多