如何在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