"Куча"/STL отладки, отлаживающая эквивалентный для GCC?

Вы также можете использовать Стандартный текстовый редактор :

printf '%s\n%s\n%s\n' '%s/$/ /' '%j' 'w' | ed -s file

Примечание: это сохраняет результат обратно в file.

Как и в sed, это решение страдает от необходимости сначала загружать весь файл в память.

6
задан rpg 24 July 2009 в 12:51
поделиться

5 ответов

Я не слишком знаком с отладочной кучей и проверками STL, но когда у меня возникают проблемы с памятью в GCC на Linux, я использую переменную среды с именем MALLOC_CHECK_ (из malloc (3)):

Последние версии Linux libc (позже, чем 5.4.23) и GNU libc (2.x) включают реализация malloc, настраиваемая через переменные среды. когда Установлен MALLOC_CHECK_, используется специальная (менее эффективная) реализация, которая разработан, чтобы быть устойчивым к простым ошибкам, таким как двойные вызовы free () с тем же аргументом, или превышение одного байта (ошибки с точностью до одного). Не все Однако от таких ошибок можно защититься, что может привести к утечкам памяти. Если MALLOC_CHECK_ установлен в 0, любое обнаруженное повреждение кучи игнорируется; если установлено значение 1, диагностика выводится на stderr; если установлено в 2, вызывается abort () немедленно. Это может быть полезно, потому что в противном случае может произойти сбой. позже, и истинную причину проблемы очень трудно отследить.

Существует также электрическая ограда, которая может помочь отловить переполнение буфера, которое прекращается, как только происходит переполнение / опустошение. См. libefence (3) для получения дополнительной информации.

8
ответ дан 8 December 2019 в 12:22
поделиться

Версия стандартной библиотеки STLport на http://sourceforge.net/projects/stlport/ имеет режим отладки, который я использовал использовать, и который рекомендуется Скоттом Мейерсом в Effective STL. Однако я не использовал его уже несколько лет, поэтому не могу поручиться за текущее состояние.

3
ответ дан 8 December 2019 в 12:22
поделиться

Некоторая отладка кучи доступна в efence / DUMA (даже в MinGW)

3
ответ дан 8 December 2019 в 12:22
поделиться

Я никогда ими не пользовался, но знаю, что glibc имеет некоторые возможности для отладки динамически выделяемой памяти. Вот соответствующая запись руководства http://www.gnu.org/s/libc/manual/html_node/Memory-Allocation.html#Memory-Allocation . В «Неограниченном распределении» есть информация о различных способах перехвата функций распределения, а в «Отладка распределения» содержится некоторая информация о способности glibc отслеживать выделение.

Лично я считаю, что Valgrind - самый простой способ сделать это.

3
ответ дан 8 December 2019 в 12:22
поделиться

What you're looking for can be enabled by defining _GLIBCXX_DEBUG before including any standard libraries. I'm not sure what affects this will have if you can't use it consistently. My default advice would be to be very careful. Also I've heard that the debug checks can be a big performance hit. So big that it may be unwise to always have it enabled for debug builds.

2
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: