MacOSXのデバッグ手法(1)

就職活動が苦戦しています。いまだ最終面接すらいけない始末。おかげで最近はちょっと自信喪失気味です...。
§
さて、今回はちょっと気分を変えて、MacOSXにおけるデバッグ手法を一つ紹介。
MacOSのメモリアロケーターは、標準でデバッグを支援する様々な機能が備わっています。例えば、プログラムの実行後に以下のようなメッセージが表示された場合、free() によるメモリの二重解放又は未割当てのメモリ領域の解放を通知してくれます。メモリ関連のバグは、普段は表面化しない事が多いので、大きな問題になる前に発見することができ大変重宝してます。

malloc: ***  Deallocation of a pointer not malloced: 0xbffff8ac; 
This could be a double free(), or free() called with the middle of an allocated block; 
Try setting environment variable MallocHelp to see tools to help debug

この問題の解決にあたっては、GDB から malloc_printf という関数にブレークポイントを設定してプログラムが停止したところでバックトレースを見れば、大体どこがエラーの原因なのか特定することができます。おそらくデバッグ中に何度もGDBを起動することになると思うので、.gdbinit に

b malloc_printf

と書いておけば便利でしょう。

参考URL:http://developer.apple.com/jp/technotes/tn2004/tn2124.html