Отладочная куча / STL отладочный эквивалент для GCC? - PullRequest
5 голосов
/ 24 июля 2009

Я планирую использовать GCC больше (Linux и Windows), и мне было интересно, есть ли эквивалент MSVC кучи отладки и STL проверок , доступных для GCC CRT и STL.

Я уже знаю о таких инструментах, как Valgrind, но я ищу что-то встроенное в библиотеки.

Ответы [ 5 ]

7 голосов
/ 24 июля 2009

Я не слишком знаком с кучей отладки и проверками 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 () вызывается немедленно. Это может быть полезно, потому что в противном случае сбой может произойти гораздо позже, и тогда истинную причину проблемы будет очень трудно отследить.

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

3 голосов
/ 24 июля 2009

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

3 голосов
/ 24 июля 2009

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

Есть также ветка об отладке GCC STL здесь , но я еще разЯ не могу поручиться за информацию, которую она дает.

2 голосов
/ 18 декабря 2009

То, что вы ищете, можно включить, определив _GLIBCXX_DEBUG перед включением любых стандартных библиотек. Я не уверен, что это повлияет, если вы не сможете использовать его последовательно. Мой совет по умолчанию - быть очень осторожным. Также я слышал, что проверки отладки могут сильно повлиять на производительность. Настолько большой, что может быть неразумно всегда включать его для отладочных сборок.

2 голосов
/ 24 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...