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のソースは結構読みやすいような。