現在,Escキーで終了するプログラムが手元にあります.
しかし,しばしEscキーで終了すると
「....exeの0x4b76ba36でハンドルされていない例外が発生しました:
0xc0000005: Accessviolation」
といったメッセージが表示されます.
これはおそらくアドレス0x4b76ba36に対応した変数に
格納されている数値がよくないことを示しているのだと思います.
みなさんはこのような場合,どのように対処していますか?
アドレス0x4b76ba36が対応している変数名を調べて,
その変数がよくない動作をする理由を探す,ということが一般的なのでしょうか.
また,この後に逆アセンブルなる画面も出現します.
VC++ windowsXPです.
アドレスについて
Re:アドレスについて
> アドレス0x4b76ba36が対応している変数名を調べて,
> その変数がよくない動作をする理由を探す,ということが一般的なのでしょうか.
多分一般的とは言えないでしょう。
「プログラムの途中で何らかの不正な処理を行い、
プログラム終了時に異常が検出される」という状況だと思いますが、
検出された時の情報から不正な処理まで遡ることは、非常に難しい場合が多いです。
(私のレベルの話。もっと上級の人はまた別の意見かもしれません)
終了時の異常が必ず(または高頻度で)発生するならば、デバッグは比較的楽になります。
異常が発生するという状態を保ったまま、異常とは無関係と思われる部分のプログラムを
削除し、異常が含まれる範囲を狭めていきます。
> その変数がよくない動作をする理由を探す,ということが一般的なのでしょうか.
多分一般的とは言えないでしょう。
「プログラムの途中で何らかの不正な処理を行い、
プログラム終了時に異常が検出される」という状況だと思いますが、
検出された時の情報から不正な処理まで遡ることは、非常に難しい場合が多いです。
(私のレベルの話。もっと上級の人はまた別の意見かもしれません)
終了時の異常が必ず(または高頻度で)発生するならば、デバッグは比較的楽になります。
異常が発生するという状態を保ったまま、異常とは無関係と思われる部分のプログラムを
削除し、異常が含まれる範囲を狭めていきます。
Re:アドレスについて
VC++であれば、「呼び出し履歴」で自分のプログラムを探すと原因が特定しやすいです。
※ 「呼び出し履歴」は文字通り関数の呼び出し履歴です。OS中やライブラリ中で問題が起きていても遡れば、自分のプログラムまで戻ることができます。
自分のプログラムに遡ったら、呼び出している関数のパラメータなどを確認してみると良いでしょう。
※ 「呼び出し履歴」は文字通り関数の呼び出し履歴です。OS中やライブラリ中で問題が起きていても遡れば、自分のプログラムまで戻ることができます。
自分のプログラムに遡ったら、呼び出している関数のパラメータなどを確認してみると良いでしょう。