AIXのダブルフリーの検出機能について。

その昔のメモ。
毎回探すのが大変なのでここに。

環境変数を指定して実行するだけで、ダブルフリーがわかります。

ちと古いマニュアルページ

実行例
$ cat -n mtest.c
     1  #include 
     2  #include 
     3
     4  int
     5  main()
     6  {
     7      char *p;
     8
     9      p = (char*) malloc (1000);
    10
    11      free(p);
    12      free(p);
    13
    14      return 0;
    15  }
    16
    17

$ xlc -g mtest.c

#↓ちなみに、普通に実行しても何も起きません。
$ ./a.out

#↓環境変数を設定して実行します。
$ MALLOCTYPE=debug MALLOCDEBUG=validate_ptrs ./a.out
Debug Malloc: Buffer (0x20001c18) has already been free'd.
IOT/Abort trap (core dumped)

$ dbx a.out core
ヘルプを見るには 'help' とタイプしてください。
シンボル情報を読取り中です...
[core 中のメモリ・イメージの使用 ]

IOT/Abort trap in raise at 0xd01de228
0xd01de228 (raise+0x4c) 80410014        lwz   r2,0x14(r1)
(dbx) where
raise(??) at 0xd01de228
abort() at 0xd01ece20
do_validate_part2(??, ??, ??) at 0xd01d931c
do_debug_free(??) at 0xd01d8fd4
main(), line 12 in "mtest.c"