2016-05-07 7 views
3

Добрый день!Valgrind на FreeBSD

Я играю вокруг одного проекта на C. Он расположен на машине FreeBSD (это выглядит как малина PI2, не уверен)

enter image description here

Проблема заключается в том, я хочу, чтобы запустить проект в Valgrind, чтобы найти утечку памяти. Когда я пытаюсь установить Valgrind через порты, я получаю следующее сообщение об ошибке:

[email protected]:/usr/ports/devel/valgrind # make 
===> valgrind-3.10.1.20160113,1 is only for i386 amd64, while you are running 
armv6. 
*** Error code 1 

Stop. 
make: stopped in /usr/ports/devel/valgrind 

Пожалуйста, помогите запустить Valgrind на этой платформе.

ответ

6

Комбинация ARM6/FreeBSD не поддерживается.

Команда valgrind doesn't support FreeBSD at all, а люди, которые поддерживают FreeBSD port, ограничили ее до i386 и AMD64, потому что это текущие архитектуры Tier 1.

Угадайте, поддержка valgrind для ARM не будет реализована до тех пор, пока ARM не станет платформой уровня 1 или пока кто-то не сделает шаг вперед, чтобы выполнить портирование.

Смотрите также заявление команды VALGRIND по портированию:

Maintaining each port takes a lot of effort, more so than for most other programs. Valgrind is fragile due to the low-level nature of what it does. Also, each platform port has CPU-specific code, OS-specific code and platform-specific code, and testing all the combinations is difficult.

Update:

На FreeBSD вы можете использовать очень мощный dtrace инструмент для мониторинга производительности и отладки. Тем не менее, у него есть крутая кривая обучения.

Мой любимый инструмент для отладки по-прежнему размещает printf() в стратегических местах. Предположим, что ваша программа сработала в большом блоке кода. Поместите printf посередине, перекомпилируйте и повторно запустите. Если вы видите выход, ошибка возникла после printf. Если вы этого не сделали, это было до printf. Вы уменьшили вдвое размер блока, содержащего ошибку. Теперь добавьте еще printf в середине оставшегося подозрительного кода и повторите. Этот метод называется делом пополам. Вы также можете использовать его для контроля значения переменной.

Я хотел бы предложить, чтобы обернуть отладки printf в макро ([1], [2]), так что вы можете оставить их в коде, но их можно отключить для построения релиза.

+0

Большое спасибо за ваш ответ. Итак, какие существуют опции для отладки программ, написанных на языке C (кроме 'gdb') на FreeBSD/ARM? –

+0

@ GeorgeGaál См. Обновленный ответ. –