2

私はかなり長い間メモリリークのデバッグを試みてきました。私の主な問題は、Valgrind などの適切なツールを使用できないことです。そのため、単純な GDB + strace に落ち着きました。

私のプログラムはループです。反復ごとに、いくつかのオブジェクトを作成し、それらのデストラクタを呼び出します。hereで説明されているように、ループの最初の反復での最初の割り当ての後、プログラムは常に同じオブジェクトを割り当てているため、常に同じスペースを再利用する必要があるため、より多くのメモリを要求するべきではありません。それでも、私のプログラムはbrk()15 回の反復ごとに呼び出し、渡される引数は毎回brk4.096 ずつ増加します (1 回目: brk(0xb7887000) = 0xb7887000、2 回目: brk(0xb7888000) = 0xb7888000、3 回目:brk(0xb7889000) = 0xb7889000など)。

次に、GDB を自分のプログラムにフックして、プログラムを数回実行し、brk にブレークポイントを設定してみました(gdb) break brk

アドレスにブレークポイントを設定すると表示されますが、プログラムを 15 回以上繰り返し実行しても、ブレークポイントが「呼び出される」ことはありません (?)。

なぜそれが起こっているのですか?どうすれば何が起こっているのか理解できますか?

4

0 に答える 0