ページ 11

アドレスについて

Posted: 2010年3月17日(水) 15:13
by no
現在,Escキーで終了するプログラムが手元にあります.
しかし,しばしEscキーで終了すると

「....exeの0x4b76ba36でハンドルされていない例外が発生しました:
0xc0000005: Accessviolation」

といったメッセージが表示されます.
これはおそらくアドレス0x4b76ba36に対応した変数に
格納されている数値がよくないことを示しているのだと思います.

みなさんはこのような場合,どのように対処していますか?

アドレス0x4b76ba36が対応している変数名を調べて,
その変数がよくない動作をする理由を探す,ということが一般的なのでしょうか.

また,この後に逆アセンブルなる画面も出現します.

VC++ windowsXPです.

Re:アドレスについて

Posted: 2010年3月17日(水) 15:46
by たいちう
> アドレス0x4b76ba36が対応している変数名を調べて,
> その変数がよくない動作をする理由を探す,ということが一般的なのでしょうか.

多分一般的とは言えないでしょう。
「プログラムの途中で何らかの不正な処理を行い、
プログラム終了時に異常が検出される」という状況だと思いますが、
検出された時の情報から不正な処理まで遡ることは、非常に難しい場合が多いです。
(私のレベルの話。もっと上級の人はまた別の意見かもしれません)

終了時の異常が必ず(または高頻度で)発生するならば、デバッグは比較的楽になります。
異常が発生するという状態を保ったまま、異常とは無関係と思われる部分のプログラムを
削除し、異常が含まれる範囲を狭めていきます。

Re:アドレスについて

Posted: 2010年3月17日(水) 16:00
by softya
VC++であれば、「呼び出し履歴」で自分のプログラムを探すと原因が特定しやすいです。
※ 「呼び出し履歴」は文字通り関数の呼び出し履歴です。OS中やライブラリ中で問題が起きていても遡れば、自分のプログラムまで戻ることができます。
自分のプログラムに遡ったら、呼び出している関数のパラメータなどを確認してみると良いでしょう。

Re:アドレスについて

Posted: 2010年3月17日(水) 16:56
by dic
「プログラム」とありますが
ソースコードを含めて手元にある状況でしょうか?

Re:アドレスについて

Posted: 2010年3月17日(水) 21:26
by no
失礼しました.exeファイルだけでなく,ソースコードもあります.



なるほど,呼び出し経歴なるものがあるのですね.
便利そうなので使ってみたいと思います.