2015年9月18日金曜日

stb ライブラリーのメモリーリークチェッカー stb_leakcheck.h の使い方

stb に stb_leakcheck.h が追加されていることにいまさら気づいた。まだドキュメントやテストは無いみたいだけど、 stb らしくたいへんシンプルでミニマムな作りになっているので使ってみました。

http://melpon.org/wandbox/permlink/eLhc8XwftKaV2VdM

#include <cstdlib>

#define STB_LEAKCHECK_IMPLEMENTATION
#pragma GCC diagnostic ignored "-Wformat"
#pragma GCC diagnostic ignored "-Wformat-extra-args"
#pragma GCC diagnostic ignored "-Wwrite-strings"
#include "stb_leakcheck.h"

auto main() -> int
{
  std::atexit( []{ stb_leakcheck_dumpmem(); } );

  malloc( 256 );
  malloc( 384 );
  free( malloc( 512 ) );
  realloc( malloc( 384 ), 1024 );
}
LEAKED: prog.cc (  16): %8 bytes at 0x400
LEAKED: prog.cc (  14): %8 bytes at 0x180
LEAKED: prog.cc (  13): %8 bytes at 0x100

stb_leakcheck.hはCPPでmalloc,free,reallocを乗っ取る実装になっています。と、いうことでoperator newでmallocを再定義しても、 __FILE__ __LINE__ を単純には取れないし、C++er的には素直に jemallocvalgrind のお世話になった方が楽&高機能で良さそう。

ちょっとしたCプロジェクトならこれでも十分だろうね。

0 件のコメント:

コメントを投稿