Опция, позволяющая включить агрессивную проверку

Имеется опция, позволяющая включить агрессивную проверку утечек памяти, при которой для каждого распределения находятся все доступные указатели, хранящие ссылку на эту память. Это более точный способ, поскольку часто в программе память распределяют, но в конце не освобождают, так как память в любом случае будет возвращена операционной системе после того, как программа завершится.

$ valgrind —leakcheckyes./broken 2292 searching for pointers to 1 notfreed blocks. 2292 checked 5318724 bytes.

Мини-картинка

2292 поиск указателей на 1 неосвобожденный блок.

2292 проверено 5318724 байт.

2292

2292 5 bytes in 1 blocks are definitely lost in loss record 1 of 1 2292 5 байт в 1 блоке определенно потеряны в потерянной записи 1 из 1 2292 at 0хЕС528В: malloc (vg_replace_malloc. с:153) 2292 by 0x8048437: broken (broken. с:20) 2292 by 0x804851F: main (broken. с:47)

2292 by 0x126BAE: libc_start_main (in /lib/libc2.3.2. so) 2292 22 92 LEAK SUMMARY:

2292 definitely lost: 5 bytes in 1 blocks. 2292 possibly lost: 0 bytes in 0 blocks. 2292 still reachable: 0 bytes in 0 blocks. 2292 suppressed: 0 bytes in 0 blocks.

2292 Reachable blocks (those to which a pointer was found) are not shown. 2292 To see them, rerun with: —showreachableyes 2292 ИТОГИ ПО УТЕЧКАМ:

2292 определенно потеряно: 5 байт в 1 блоке. 2292 возможно потеряно: 0 байт в 0 блоке. 2292 пока достижимы: 0 байт в 0 блоке. 2292 подавлено: 0 байт в 0 блоке.

2292 Достижимые блоки (на которые найдены указатели) не показаны. 2292 Чтобы увидеть их, запустите с: —showreachableyes Инструмент Valgrind включает детализированную информацию по своим возможностям и поддерживает множество опций командной строки, которые модифицируют его поведение. Поскольку Valgrind использует эмулятор центрального процессора, программа в нем выполняется во много раз медленнее, чем обычно в системе. Точное замедление зависит от программы, однако Valgrind задумывался для интерактивных программ.

Valgrind могут слегка ввести в заблуждение программы, скомпилированные с высокими уровнями оптимизации. Если вы получаете отчет об ошибке памяти, которая не выглядит осмысленно, попробуйте перекомпилировать программу с О вместо 02 (или выше) и сгенерировать новый отчет.

Мини-картинка

75 Electric Fence Следующее средство, которое мы рассмотрим — это Electric Fence (доступен на ftp: //sunsite. unc. edu/pub/Linux/devel/lang/c и во многих дистрибутивах). Несмотря на то что Electric Fence не обнаруживает утечки памяти, он очень помогает в изоляции переполнений буфера. Каждый современный компьютер (включая все машины, работающие под Linux) обеспечивают аппаратную защиту памяти. Linux этим пользуется для изоляции программ друг от друга (например, сеанс vi не имеет доступа к памяти дсс) и для безопасного разделения кода между процессами, делая его только для чтения. Системный вызов mmap () в Linux позволяет процессу воспользоваться также аппаратной защитой памяти.

Electric Fence заменяет обычную функцию malloc () библиотеки С версией, которая распределяет запрошенную память и (обычно) непосредственно после запрошенной выделяет фрагмент памяти, доступ к которой процессу не разрешен. Если процесс попытается получить доступ к этой памяти, ядро немедленно остановит его с выдачей ошибки сегментации. За счет такого распределения памяти Electric Fence обеспечивает уничтожение программы, если та предпримет попытку чтения или записи за границей буфера, распределенного malloc (). Детальную информацию по использованию Electric Fence можно прочитать на его шапстранице (man libefence).


Ведете ли вы блог?

Да
Нет
Планирую


Результаты опроса

Новостной блок