動作環境
C++ Builder XE4
Error
Access violation at address XXXX in module 'プログラム名.exe' 読み取り of address XXXXXXXX.
上記はメモリ関連のエラーによる原因特定が難しい例である。
原因特定 2017-11-24
今日の原因特定の方法は以下とした。
- watchdogを止める
- 特有ハードウェアのwatchdogを使っているソフト
- エラーと同時にwatchdogによりPC再起動がかかるのはデバッグが難しい
- 動作内容の把握
- 同時に動くフォーム、TThreadの把握
- 同時に動くものを止めていく
- 設定変更で止める
- プログラム変更で止める
ある装置との通信プログラム(UDP)で上記のエラーが出ているようだと特定できた。
(ファイル保存処理と思っていたが、そちらは「結果」であって「原因」ではなさそうだ)。
複雑なもののデバッグ
複雑なものを複雑なままデバッグしようとする例は見かける。
そうなると「Engineering」ではなく「推測ゲーム」になる。
Engineerとしての正しい対処として、「複雑なものを簡素化する」ことをよく行い、それはうまくいっているように思う。
GitなどのVCSを使うことで、簡素化した後に元の状態に簡単に戻せるようになったこともデバッグ時間短縮に貢献している。