Проверка согласованности кучи во встроенной системе - PullRequest
1 голос
/ 20 мая 2010

Я получаю сбой, как это:

#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 голосов
/ 21 мая 2010

Вы можете написать драйверы-заглушки, которые претендуют на аппаратное обеспечение, что позволит вам создавать и тестировать свою программу в более полнофункциональной среде.

0 голосов
/ 20 мая 2010

Я бы использовал замену malloc () (см. Также этот ответ ), которую можно легко сделать более многословной. Я не говорю, что вам нужна сборка мусора, но вам, похоже, нужны дополнительные средства ведения журналов, которые предоставляет ссылка.

Если это повреждение кучи, сборщик также захлебнется и даст вам более значимые сообщения. Он не должен быть слишком сложным в использовании, получите то, что вам нужно, затем прекратите использование (особенно если вы просто дадите ему перехватить malloc()).

Это не собирается сосредоточиться на проблеме, как это делает Valgrind, но, по крайней мере, это вариант:)

...