如何在armv5上调试堆损坏
我在嵌入式设备上的Linux上。 我的架构是armv5。
我相当大的(〜30kloc)随着时间的推移发生了一些堆腐败。
由于我的拱不被支持,我无法运行valgrind。 我只能运行有限的gdb,因为我的应用程序使用线程,并且最可能发生的损坏发生在一个线程中。
我明白了
警告:无法找到匹配劣质线程库的libthread_db,线程调试将不可用。
libthread_db和libpthread来自我的gnueabi工具链。
我想知道现在最好的行动是什么。 我应该不断尝试让libthread_db与gdb一起工作吗? 还是有一些其他工具,如valgrind,我可以使用?
警告:无法找到匹配劣质线程库的libthread_db,线程调试将不可用。
此错误意味着GDB试图dlopen每一个libthread_db.so.1从libthread-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 。
即使您设法正确设置了多线程调试(无论如何您都应该尝试进行调试),但这很可能不会帮助您发现堆损坏问题:通常在您由于堆损坏而发生崩溃时,所有实际上导致它的代码痕迹已经消失。
如果你在目标上使用glibc , MALLOC_CHECK_=2可能会有所帮助。 文档在这里。
如果你正在使用其他的libc ,它可能有类似的malloc调试工具。 或者你可以尝试使用许多可用的调试malloc之一。
这个问题的答案有非常好的指导方针。 我会给电线跑。 这篇论文也是非常丰富的(即使它会谈使用valgrind)。
链接地址: http://www.djcxy.com/p/82317.html