解決済み

混合モードでのデバッグ

  • 困ってます
  • 質問No.8568395
  • 閲覧数232
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (3/3)

VC6.0でソフトを開発中です。

デバッグモードでソフト終了時に、
例外処理 (初回) は ABC.exe (TEMP.DLL) にあります: 0xC0000005: Access Violation。
というよく見かけるエラーが出たので、例外が起きた場所で停止して原因を特定しようとしたのですが、
混合モードで

 678ED25F movaps xmm0,xmmword ptr [esi]
 678ED262 movaps xmm1,xmmword ptr [esi+10h]
 678ED266 lea esi,[esi+20h]

と、ソースコードのないところしか出てきません。
これはどういった意味なのでしょうか?
ここから先、原因を特定するにはどのようにすればよいでしょうか?

MFCプログラムの開発は多少経験がありますが、あまり詳しくありません。
よろしくお願いいたします。

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 53% (2177/4070)

サポートも終わっているVC6ってのも厳しいところですが……

>例外処理 (初回) は ABC.exe (TEMP.DLL) にあります: 0xC0000005: Access Violation。
>というよく見かけるエラーが出たので、例外が起きた場所で停止して原因を特定しようとしたのですが、

Access Violationでは、発生したところと原因の位置が違い過ぎます。
ので、その方法ではチェックできません。
# たとえば…ポインタに不正な値を入れていた(原因)としても、それがAccess Violationとして表面化する(エラー発生)のはそのポインタの内容を参照した時です。

>と、ソースコードのないところしか出てきません。
>これはどういった意味なのでしょうか?

API内部だったり、ライブラリの中だったりするとソースは出てこないでしょう。

>ここから先、原因を特定するにはどのようにすればよいでしょうか?

ポインタ関係で変な操作しているところがないか…とか、そういう探し方でしょうかねぇ……。
あちこちにTRACE()入れて、どこまで進んでいるか…って調べるのもありかも知れません。

>デバッグモードでソフト終了時に、

動的確保して、オーバーランやアンダーランしたとか、解放し忘れたとか、そういうところとかありませんか?
プログラム終了時の後始末関係でエラーになったのではないかと推測されます。
お礼コメント
rufuna

お礼率 100% (3/3)

ご回答ありがとうございます。

>Access Violationでは、発生したところと原因の位置が違い過ぎます。
>ので、その方法ではチェックできません。

そうなんですね・・・具体的な例を示して頂き助かります。
やはりポインタ操作でミスというのが一番濃厚でしょうか。
動的確保に関する処理をもう一度洗い直してみます。

最後になりましたが、お礼が遅くなってしまい申し訳ございませんでした。
ご丁寧にありがとうございました。
投稿日時 - 2014-04-28 21:57:50
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ