嵌入式系统的堆一致性检查

时间:2010-05-20 09:27:26

标签: linux heap consistency

我发生了这样的崩溃:

#0  0x2c58def0 in raise () from /lib/libpthread.so.0
#1  0x2d9b8958 in abort () from /lib/libc.so.0
#2  0x2d9b7e34 in __malloc_consolidate () from /lib/libc.so.0
#3  0x2d9b6dc8 in malloc () from /lib/libc.so.0

我猜这是一个堆腐败问题。 uclibc没有mcheck / mprobe。 Valgrind似乎不支持MIPS,我的应用程序(多线程)取决于hw特定的驱动程序。有关检查堆的一致性和检测损坏的建议吗?

2 个答案:

答案 0 :(得分:0)

我希望use a replacement malloc()(另见this answer)可以很容易地变得更加冗长。我不是说你需要垃圾收集,但你似乎确实需要链接提供的额外日志记录工具。

如果它是堆损坏,收集器也会阻塞它,并为您提供更有意义的消息。它应该不会太难使用,得到你需要的东西,然后停止使用(特别是如果你让它拦截malloc())。

它不会像Valgrind那样对问题采取零,但至少它是一个选项:)

答案 1 :(得分:0)

您可以编写伪装成硬件的存根驱动程序,这样可以让您在功能更全面的环境中构建和测试程序。