2

我遇到这样的崩溃:

#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 并且我的应用程序(它是多线程的)取决于硬件特定的驱动程序。检查堆的一致性和检测损坏有什么建议吗?

4

2 回答 2

1

我会使用一个替换 malloc()(另见这个答案),它可以很容易地变得更冗长。我并不是说您需要垃圾收集,但您似乎确实需要该链接提供的其他日志记录工具。

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

它不会像 Valgrind 那样在问题上归零,但至少它是一种选择:)

于 2010-05-20T16:00:57.067 回答
0

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

于 2010-05-21T01:23:53.493 回答