Strace обнаруживает вызовы brk, но GDB не останавливается на точке останова

Я пытался отладить утечки памяти в течение довольно долгого времени. Моя главная проблема не в том, что я не могу использовать подходящие инструменты, такие как Valgrind и тому подобное, поэтому я остановился на простой GDB + strace.

Моя программа - это цикл. На каждой итерации он создает несколько объектов, а затем вызывает их деструкторы. Как объясняется здесь, после первого выделения на первой итерации цикла программа не должна запрашивать больше памяти, поскольку она всегда выделяет одни и те же объекты и, следовательно, всегда должна использовать одно и то же пространство. Все же моя программа звонит brk() каждые 15 итераций, и аргумент передается brk увеличивается каждый раз на 4.096 (например, 1-й раз: brk(0xb7887000) = 0xb78870002-й раз: brk(0xb7888000) = 0xb78880003-й раз: brk(0xb7889000) = 0xb7889000, и так далее).

Затем я попытался подключить GDB к моей программе, позволить программе работать в течение нескольких итераций и установить точку останова на brk с помощью (gdb) break brk,

В нем говорится, что он устанавливает точку останова для адреса, но даже если я позволю своей программе работать более 15 итераций, точка останова никогда не будет "вызвана" (?).

Почему это происходит? Как я могу понять, что происходит?

0 ответов

Другие вопросы по тегам