#c #terminal #valgrind
#c #терминал #valgrind
Вопрос:
Я только начинаю с программирования на C (следуя вместе с «C The Hard Way») — каждый раз, когда я пытаюсь запустить valgrind, я сразу получаю ошибку сегментации в терминале.
Я установил и переустановил valgrind
Какие-либо предложения здесь?
Комментарии:
1. Вы хотите сказать, что ваша примерная программа выполняет сегментацию при запуске через valgrind, или что valgrind сам выполняет сегментацию?
2. Вы программируете segfault, когда запускаете его вне valgrind?
3. Что ж, программа работает нормально. только когда я valgrind, я получу ошибку сегментации. если я ПРОСТО наберу valgrind, он также покажет ошибку сегментации.
Ответ №1:
Valgrind никогда не должен выполнять сегментацию — каждая (даже ошибочная) программа должна быть запущена и проблемы перехвачены.
Если вы получаете ошибки сегментации даже для таких безобидных команд, как valgrind true
, я предлагаю вам загрузить предварительно скомпилированные двоичные файлы valgrind для вашей ОС, предположительно с ее менеджером пакетов. Иногда возникают подобные проблемы с компиляцией (могут быть ошибки в компиляторе, несовместимость между исходными текстами и компилятором, плохие библиотеки …). Вы, вероятно, не хотите углубляться в это, если вы все еще учитесь.
Если valgrind просто сообщает о сбое в сегментации в вашей программе, опубликуйте его сообщения. Это означает, что у вас есть ошибка в вашей программе.
Комментарии:
1. Это происходит и с valgrind true. Должен ли я удалить все ссылки на valgrind (если да, то где они, черт возьми?) Или просто снова запустить предварительно скомпилированный пакет?
2. Попробуйте выполнить
sudo make uninstall
в каталоге, который вы запустилиsudo make install
. Если это не сработает, найдите недавно созданные файлы в разделе/usr/local
и удалите их (попробуйтеfind /usr/local -newer .
). Вероятно, вы можете удалить все содержимое/usr/local
, если вы не установили другие вещи из исходного кода. Затем установитеvalgrind
с помощью менеджера пакетов вашего дистрибутива.3. Еще какие-нибудь советы по этому поводу? Valgrind просто сразу вылетает с «ошибкой сегментации (сброс ядра)» для меня. Однако только в моем коде он отлично работает с другими материалами, и это предварительно скомпилированная версия из репозиториев Ubuntu 16.04 (версия valgrind-3.11.0). В некоторой растерянности относительно того, что делать, когда valgrind умирает… Я думаю, я могу попробовать некоторые другие версии или что-то в этом роде.
Ответ №2:
В какой программе ошибка SEGV, valgrind
в самой или в вашей собственной программе?
Если это ваша программа, вы можете просто скомпилировать ее с включенной отладкой (которая используется gcc -g
в Linux), а затем запустить ее в отладчике ( gdb
в Linux).
Если это valgrind
само по себе, поскольку вы новичок, вам не повезло, но вы все равно можете отлаживать свою программу традиционным способом (с gdb
помощью ). Использование gdb
задокументировано здесь
Комментарии:
1. Я забыл напомнить, что вы также можете использовать сборщик мусора Boehm, чтобы избежать большого количества утечек памяти (используйте GC_MALLOC вместо malloc и т. Д.)
2. могу ли я запустить gdb через терминал — и да, новичок здесь.
3. Да, gdb можно запустить в терминале. Прочитайте его документацию и не забудьте перекомпилировать с помощью флага -g перед его использованием.