gpt4 book ai didi

linux - 调试 "corrupted double-linked list"崩溃的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:26 25 4
gpt4 key购买 nike

我正在调试“损坏的双链表”崩溃。我已经看过源代码并了解 block 结构和 fd/bk 指针等,所以我想我知道为什么会发生此崩溃。我现在正在尝试修复它,但我有几个问题。

问题 #1:在哪里(相对于从 malloc 返回的指针)维护 malloc_chunks 结构?它们是在内存块之前还是之后?

问题 #2:已分配内存的 malloc_chunks 与未分配内存的 malloc_chunks 不同。看起来(??)分配的缓冲区案例没有 fd/bk 指针。它是否正确?

问题 3:调试此类错误的推荐方法是什么?我假设我应该为 malloc_chunks 设置一个断点,这样我就可以在结构被覆盖时中断。但我不确定如何访问这些 malloc 结构,因此我可以在 gdb 中设置断点。

如有任何关于如何进行的建议,我们将不胜感激。

谢谢,-安德烈斯

最佳答案

what is the recommended approach to debug this type of error?

通常的方法是不是查看 GLIBC 内部结构,而是使用像 Valgrind 这样的工具。或 AddressSanitizer ,其中任何一个都可能直接指出问题所在。

更新:

Valgrind crashes ...

您应该尝试从源代码构建最新的 Valgrind 版本,如果仍然崩溃,请将崩溃报告给 Valgrind 开发人员。

很可能 Valgrind 问题已经解决,构建新的 Valgrind 并用它测试您的程序将仍然比尝试调试 GLIBC 内部更快(堆损坏错误众所周知 很难通过程序检查或调试找到)。

AddressSanitizer, I thought it was a clang only tool -- I do not think it is available for linux.

两点:

  1. Clang 在 Linux 上工作得很好,我几乎每天都用它,
  2. Recent GCC versions具有等效的 -fsanitize=address 选项。

关于linux - 调试 "corrupted double-linked list"崩溃的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com