2010-05-20 4 views
1

je reçois un accident comme celui-ci:Heap Vérification de la cohérence sur le système embarqué

#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 

Je suppose que c'est un problème de corruption de tas. uclibc n'a pas mcheck/mprobe. Valgrind ne semble pas prendre en charge MIPS et mon application (qui est multi-thread) dépend de pilotes spécifiques hw. Des suggestions pour vérifier la cohérence du tas et détecter la corruption?

Répondre

0

Je voudrais use a replacement malloc() (voir aussi this answer) qui peut facilement être rendu plus bavard. Je ne dis pas que vous avez besoin de garbage collection, mais vous semblez avoir besoin des facilités de journalisation supplémentaires que le lien fournit.

S'il s'agit d'une corruption de segment, le collecteur va également s'étouffer et vous donner des messages plus significatifs. Il ne devrait pas être trop difficile à utiliser, obtenir ce dont vous avez besoin, puis cesser d'utiliser (surtout si vous laissez juste intercepter malloc()).

Sa ne va pas à zéro sur le problème comme Valgrind fait, mais au moins son option :)

0

Vous pouvez écrire des pilotes stub qui font semblant d'être le matériel, ce qui devrait vous permettre de créer et de tester votre programme dans un environnement plus complet.

Questions connexes