snapshot

http://d.hatena.ne.jp/w_o/20060613#p1
テスト実行前にメモリダンプって簡単そうじゃないか、ということで、gdbのソースをぐちょぐちょやってみた。


グローバル変数の差分をダンプします。

int test_var;

int
main (int argc, char **argv)
{
	unsigned char *dump;
	snapshot_init( argv[0] );

	test_var = 0;
	dump = snapshot_get_current(); /* ここでダンプ取得 */

	test_var = 3;  /* 変数書きかえ */
	snapshot_dump_difference( dump ); /* 差分出力 */

	return 0;
}

こういうふうにすると、

test_var differd. old=0, current=3

こういう表示が出ます。


GDB 6.4とのdiff
makeしたら、中にlibgdb.aができま。その後、gdb-6.4/以下にある*.aを全部どっかに持ってきて、
そののち、こんな感じで

gcc -g test.c libgdb.a libreadline.a libopcodes.a libbfd.a  libiberty.a  -lncurses -lm  libiberty.a  -ldl -rdynamic -ldl

コンパイルすればあとは実行するだけ。


いまのところ、グローバル変数の整数値しか出ないです。とりあえず、

  • スタックフレーム辿ってローカル変数の差分とか
  • ポインタ辿ってとか

はいるかなー、といったところで。やる気が出れば続く。


GDBのソースは結構読みやすいような。