我发生了这样的崩溃:
#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特定的驱动程序。有关检查堆的一致性和检测损坏的建议吗?
答案 0 :(得分:0)
我希望use a replacement malloc()(另见this answer)可以很容易地变得更加冗长。我不是说你需要垃圾收集,但你似乎确实需要链接提供的额外日志记录工具。
如果它是堆损坏,收集器也会阻塞它,并为您提供更有意义的消息。它应该不会太难使用,得到你需要的东西,然后停止使用(特别是如果你让它拦截malloc()
)。
它不会像Valgrind那样对问题采取零,但至少它是一个选项:)
答案 1 :(得分:0)
您可以编写伪装成硬件的存根驱动程序,这样可以让您在功能更全面的环境中构建和测试程序。