gdb使い方

このバグを見つけるために、gdbの使い方を学びました。誰かのお役に立てれば幸いです。(´Д⊂

gdb.txt

b Fat12FileSystem.cpp:302 if entry->time != 0 # entry->timeが0以外のとき有効なbreakpoint
run mona.img ls -l .                          # 実行
p *entry                                      # ブレークポイントで停止するはずなので
watch entry->time                             # 怪しい変数にハードウェアブレークポイント
watch date->second                            # 怪しい変数にハードウェアブレークポイント


gdbコマンドプロンプトから実行
$bash gdb Fat12.exe
(gdb) source gdb.txt # テキストファイルから自動実行


あとはnextなりcontinueで実行を続けていって、printなどで変数を表示したり、where, btで呼び出し履歴を追ったりとか。


はまったというか情報がなくて困った点
C++クラスのprivate変数の表示や監視。
→所詮(?)構造体なので print date->secondのような書き方ができる。


今回は本格的なデバッガの使い方を学べて非常にプラスだった。printfデバッグばかりだったので、これは便利だ。
大変お世話になったサイト。⇒http://bichir.cocolog-nifty.com/blog/gdb_faq/
はてなブックマークに入れておきましょう。


あと貴重なアドバイスをくださった、id:yaneuraoさんありがとうございました。