Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
Результаты записываются в файл
dm-log$ <b>cat dm-log</b>1062078174: 1: Dmalloc version '4.8.1' from 'http://dmalloc.com/'1062078174: 1: flags = 0x4e40503, logfile 'dm-log'1062078174: 1: interval = 100, addr = 0, seen # = 01062078174: 1: starting time = 10620781741062078174: 1: free bucket count/bits: 63/61062078174: 1: basic-block 4096 bytes, alignment 8 bytes, heap grows up1062078174: 1: heap: 0x804a000 to 0x804d000, size 12288 bytes (3 blocks)1062078174: 1: heap checked 01062078174: 1: alloc calls: malloc 1, calloc 0, realloc 0, free 01062078174: 1: alloc calls: recalloc 0, memalign 0, valloc 01062078174: 1: total memory allocated: 30 bytes (1 pnts)1062078174: 1: max in use at one time: 30 bytes (1 pnts)1062078174: 1: max alloced with 1 call: 30 bytes1062078174: 1: max alloc rounding loss: 34 bytes (53%)1062078174: 1: max memory space wasted: 3998 bytes (98%)1062078174: 1: final user memory space: basic 0, divided 1, 4062 bytes1062078174: 1: final admin overhead: basic 1, divided 1, 8192 bytes (66%)1062078174: 1: final external space: 0 bytes (0 blocks)1062078174: 1: top 10 allocations:1062078174: 1: total-size count in-use-size count source1062078174: 1: 30 1 30 1 ra=0x80484121062078174: 1: 30 1 30 1 Total of 11062078174: 1: dumping not-freed pointers changed since 0:1062078174: 1: not freed: '0x804c008|s1' (30 bytes) from 'ra=0x8048412'1062078174: 1: total-size count source1062078174: 1: 30 1 ra=0x8048412 /* Выделение здесь */1062078174: 1: 30 1 Total of 11062078174: 1: unknown memory: 1 pointer, 30 bytes1062078174: 1: ending time = 1062078174, elapsed since start = 0:00:00Вывод содержит много статистических данных, которые нам пока не интересны. Интересна строка, в которой указывается не освобожденная память, с адресом возврата, указывающим на выделившую память функцию ('
ra=0х8048412dmalloc$ <b>gdb ch15-badmem1</b> /* Запустить GDB */GNU gdb 5.3...(gdb) <b>x 0x8048412</b> /* Проверить адрес */0x8048412 <main+26>: 0х8910с483(gdb) <b>info line *(0x8048412)</b> /* Получить сведения о строке */Line 11 of "ch15-badmem1.с" starts at address 0x8048408 <main+16>and ends at 0x8048418 <main+32>.Это трудно, но выполнимо, если нет другого выбора. Однако, если вы включите в свою программу заголовочный файл "
dmalloc.h#include...1062080258: 1: top 10 allocations:1062080258: 1: total-size count in-use-size count source1062080258: 1: 30 1 30 1 ch15-badmem2.c:131062080258: 1: 30 1 30 1 Total of 11062080258: 1: dumping not-freed pointers changed since 0:1062080258: 1: not freed: '0x804c008|s1' (30 bytes) from 'ch15-badmem2.c:13'1062080258: 1: total-size count source1062080258: 1: 30 1 ch15-badmem2.с:131062080258: 1: 30 1 Total of 1...(Файл
ch15-badmem2.cch15-badmem1.с"dmalloc.h"Отдельные возможности отладки включаются или выключаются посредством использования лексем (tokens) — специально распознаваемых идентификаторов — и опций
-р-mlowmedhighdmalloc -Lv$ <b>dmalloc low</b> /* Установить low */$ <b>dmalloc -Lv</b> /* Показать установки */Debug Malloc Utility: http://dmalloc.com/For a list of the command-line options enter: dmalloc --usageDebug-Flags 0x4e40503 (82052355) (low) /* Текущие лексемы */log-stats, log-non-free, log-bad-space, log-elapsed-time, check-fence,free-blank, error-abort, alloc-blank, catch-nullAddress not-setInterval 100Lock-On not-setLogpath 'log2'Start-File not-setПолный список лексем вместе с кратким объяснением и соответствующим каждой лексеме числовым значением можно получить с помощью '
dmalloc -DV$ <b>dmalloc -DV</b>Debug Tokens: