我在嵌入式设备上的linux上。我的架构是armv5。
我的相当大的堆(~30 30kloc)有某种类型的堆损坏,随着时间的推移而发生。
因为我的拱门没有支撑,所以我不能跑。我只能运行有限的gdb,因为我的应用程序使用线程,而损坏很可能发生在其中一个线程中。
我得到了
警告:无法找到libthread_db匹配thread的线程库,线程调试将不可用。
libthread_db和libp线程来自我的gnueabi工具链。
我想知道现在最好的行动是什么。我应该继续努力让libthread_db与gdb一起工作吗?或者我还可以用其他的工具,比如伐研?
发布于 2011-09-20 05:03:19
警告:无法找到libthread_db匹配thread的线程库,线程调试将不可用。
此错误意味着GDB试图从dlopen (使用show libthread-db-search-path查看是什么)的每个libthread_db.so.1,并且所有版本的libthread_db.so.1都无法使用目标上的libpthread (嵌入式设备)。
很可能您的libthread-db-search-path是不正确的。
另一种可能是您的工具链提供了(比方说) i686-linux版本的libthread_db.so.1,但是您使用的是为x86_64-linux构建的GDB。64位GDB (显然)不能打开32位libthread_db.
即使您能够正确地设置多线程调试(在任何情况下都应该这样做),也不太可能帮助您发现堆损坏问题:通常,当您由于堆损坏而崩溃时,导致它的所有代码痕迹都消失了。
如果您正在目标上使用glibc,MALLOC_CHECK_=2可能会有所帮助。文档这里。
如果您正在使用其他libc,则它可能具有类似的malloc调试工具。或者您可以尝试一种可用的许多 调试 马洛。
发布于 2011-09-19 22:02:47
这个问题的答案有很好的指导方针。我会给电栅栏跑一圈。本论文也提供了丰富的信息(即使它谈论\使用valgrind)。
https://stackoverflow.com/questions/7477727
复制相似问题