如何在armv5上调试堆损坏

我在嵌入式设备上的Linux上。 我的架构是armv5。

我相当大的(〜30kloc)随着时间的推移发生了一些堆腐败。

由于我的拱不被支持,我无法运行valgrind。 我只能运行有限的gdb,因为我的应用程序使用线程,并且最可能发生的损坏发生在一个线程中。

我明白了

警告:无法找到匹配劣质线程库的libthread_db,线程调试将不可用。

libthread_db和libpthread来自我的gnueabi工具链。

我想知道现在最好的行动是什么。 我应该不断尝试让libthread_db与gdb一起工作吗? 还是有一些其他工具,如valgrind,我可以使用?


警告:无法找到匹配劣质线程库的libthread_db,线程调试将不可用。

此错误意味着GDB试图dlopen每一个libthread_db.so.1libthread-db-search-path (使用show libthread-db-search-path ,看看那是什么),以及所有版本libthread_db.so.1失败使用目标(嵌入式设备)上的libpthread

很可能你的libthread-db-search-path简直是不正确的。

另一种可能性是你的工具链出货(比方说) libthread_db.so.1 i686-linux版本,但是你使用的是为x86_64-linux构建的GDB。 64位的GDB(显然)不能缓存32位的libthread_db

即使您设法正确设置了多线程调试(无论如何您都应该尝试进行调试),但这很可能不会帮助您发现堆损坏问题:通常在您由于堆损坏而发生崩溃时,所有实际上导致它的代码痕迹已经消失。

如果你在目标上使用glibcMALLOC_CHECK_=2可能会有所帮助。 文档在这里。

如果你正在使用其他的libc ,它可能有类似的malloc调试工具。 或者你可以尝试使用许多可用的调试malloc之一。


这个问题的答案有非常好的指导方针。 我会给电线跑。 这篇论文也是非常丰富的(即使它会谈使用valgrind)。

链接地址: http://www.djcxy.com/p/82317.html

上一篇: How to debug heap corruption on armv5

下一篇: Why would fclose hang / deadlock? (Windows)