gnatmem

gccMakefileですとgnatmemは作られないしMinGWにはlibaddr2line.aが無いため作れないのですが、そこはそれ、GNAT GPLには付いてきます。
どーせgmem.outのフォーマットなんて変わっちゃいないだろうと思ったら案の定でした。

procedure test is
   x : access integer := new integer'(1);
begin
   null;
end;
...>gnatmake -g -gnat05 test -largs -lgmem -bargs -E gccのgnatmakeとlibgmem.a
gcc -c -g -gnat05 test.adb
gnatbind -aO./ -E -I- -x test.ali
gnatlink test.ali -g -lgmem

...>gnatmem test GNAT GPLのgnatmem.exe
Global information
                                  • -
Total number of allocations : 2 Total number of deallocations : 0 Final Water Mark (non freed mem) : 10.02 Kilobytes High Water Mark : 10.02 Kilobytes Allocation Root # 1
                                    • -
Number of non freed allocations : 1 Final Water Mark (non freed mem) : 10.02 Kilobytes High Water Mark : 10.02 Kilobytes Backtrace : s-secsta.adb:495 Allocation Root # 2
                                    • -
Number of non freed allocations : 1 Final Water Mark (non freed mem) : 4 Bytes High Water Mark : 4 Bytes Backtrace : test.adb:2 ada_test

きちんと検出できてます。s-secsta.adbの495行が、なんでこの行が引っかかってるのか謎ですが。
MinGWではCランタイムはmsvcrt.dllですが、これをBorlandのものと挿げ替えて、fastmmでReportMemoryLeaksOnShutdown := True;なんてのもやってみたいなあなど妄想中。
あー、思い出しましたけど、pragma Finalize_Storage_Onlyなんつーものもありましたね。どうせメモり開放するだけなんで終了時にデストラクタなんて走らさなくていいよ宣言。