首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在armv5上调试堆损坏

如何在armv5上调试堆损坏
EN

Stack Overflow用户
提问于 2011-09-19 21:51:22
回答 2查看 1.4K关注 0票数 1

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

我的相当大的堆(~30 30kloc)有某种类型的堆损坏,随着时间的推移而发生。

因为我的拱门没有支撑,所以我不能跑。我只能运行有限的gdb,因为我的应用程序使用线程,而损坏很可能发生在其中一个线程中。

我得到了

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

libthread_db和libp线程来自我的gnueabi工具链。

我想知道现在最好的行动是什么。我应该继续努力让libthread_db与gdb一起工作吗?或者我还可以用其他的工具,比如伐研?

EN

回答 2

Stack Overflow用户

发布于 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.

即使您能够正确地设置多线程调试(在任何情况下都应该这样做),也不太可能帮助您发现堆损坏问题:通常,当您由于堆损坏而崩溃时,导致它的所有代码痕迹都消失了。

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-09-19 22:02:47

这个问题的答案有很好的指导方针。我会给电栅栏跑一圈。本论文也提供了丰富的信息(即使它谈论\使用valgrind)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7477727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档