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さんありがとうございました。