VC6.0での混合モードデバッグにおけるエラーの原因と特定方法

このQ&Aのポイント
  • VC6.0でソフトを開発中の際に、混合モードでのデバッグを行っていると、よく見かけるエラーが発生します。
  • デバッグモードでソフト終了時に表示されるエラーメッセージ「例外処理 (初回) は ABC.exe (TEMP.DLL) にあります: 0xC0000005: Access Violation」とは、何を意味するのでしょうか?
  • ソースコード上ではない箇所でエラーが発生しており、原因の特定が難しい状況です。そこで、どのようにして原因を特定すれば良いのでしょうか?
回答を見る
  • ベストアンサー

混合モードでのデバッグ

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プログラムの開発は多少経験がありますが、あまり詳しくありません。 よろしくお願いいたします。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

サポートも終わっているVC6ってのも厳しいところですが…… >例外処理 (初回) は ABC.exe (TEMP.DLL) にあります: 0xC0000005: Access Violation。 >というよく見かけるエラーが出たので、例外が起きた場所で停止して原因を特定しようとしたのですが、 Access Violationでは、発生したところと原因の位置が違い過ぎます。 ので、その方法ではチェックできません。 # たとえば…ポインタに不正な値を入れていた(原因)としても、それがAccess Violationとして表面化する(エラー発生)のはそのポインタの内容を参照した時です。 >と、ソースコードのないところしか出てきません。 >これはどういった意味なのでしょうか? API内部だったり、ライブラリの中だったりするとソースは出てこないでしょう。 >ここから先、原因を特定するにはどのようにすればよいでしょうか? ポインタ関係で変な操作しているところがないか…とか、そういう探し方でしょうかねぇ……。 あちこちにTRACE()入れて、どこまで進んでいるか…って調べるのもありかも知れません。 >デバッグモードでソフト終了時に、 動的確保して、オーバーランやアンダーランしたとか、解放し忘れたとか、そういうところとかありませんか? プログラム終了時の後始末関係でエラーになったのではないかと推測されます。

rufuna
質問者

お礼

ご回答ありがとうございます。 >Access Violationでは、発生したところと原因の位置が違い過ぎます。 >ので、その方法ではチェックできません。 そうなんですね・・・具体的な例を示して頂き助かります。 やはりポインタ操作でミスというのが一番濃厚でしょうか。 動的確保に関する処理をもう一度洗い直してみます。 最後になりましたが、お礼が遅くなってしまい申し訳ございませんでした。 ご丁寧にありがとうございました。

関連するQ&A

  • デバッグモード

    通常起動でネットに接続しようとすると、フリーズしてしまい接続することが出来ません。そのためデバッグモードで起動しネット接続を試したらフリーズすること無く接続することが出来ました。 このような場合接続できない原因を特定することは出来るのでしょうか? 特定することが難しい場合には、このままデバッグモードで起動して使っていきたいと思うのですが、デバッグモードを通常状態として使い続けることに何らかの害があるのか教えていただけないでしょうか。 当方デバッグモードというものをよく理解できていない者です。

  • 【VC++6.0(MFC)】Access Violationの対応の仕方

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++6.0(MFC)で先人が作成したソースを改良しています。 デバグモードで動かすと、 以下のメッセージが表示されるのですが、 どのように対応すればよいか、教えていただけませんでしょうか。 「例外処理 (初回) は XXXX.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation」 (※XXXXはプロジェクト名です。) (※デバグモードで動かすと同時に上記エラーが出力されます。) 上記のエラーが出ていても動かせるのですが、 デバグモード時に、メニューの「デバッグ」、「例外処理」で 「 Access Violation」の設定を 「ハンドルされてなければ停止」から「常に停止」に変更すると、 最初の画面も開けずに、混合モード画面の 7C95AB0A inc dword ptr [eax+10h] という箇所で必ず止まって、落ちてしまいます。 ここから、どのように対処すればよいか、ご教授頂きたくお願いします。

  • PICマイコンでC言語のデバッグ方法

    PIC 16Fでアセンブラでソフトを作っていたのですが、C言語でソフトを作りたいと思っています。開発用ソフトはMAPLABーXーIDEとCコンパイラはXC8を使います。 アセンブラでは、シミュレータモードでステップ動作ができたのでわかりやすくデバッグできたのですが、cではステップ動作の様なことができるのか、できない場合はどうしたらよいか教えてください。

  • C言語でのaccess violationについて

    Microsoft Visual C++でプログラムを行っていたのですが、プログラムを実行すると、エラーが発生します。 そこでデバッグを行ったら、 ハンドルされていない例外は”アプリ名.exe”にあります :0xC0000005:Access Violation。 というメッセージが出てきました。 ネットでAccess Violationについて調べたのですが、いまひとつ理解できません。 これはどういうことなのでしょうか?また、解決策をご教授願えないでしょうか? 初心者なので、可能な限り専門用語などを使わない、わかりやすい解説をしていただけると幸いです。お願いします。

  • ハンドルされていない例外は・・・

    ハンドルされていない例外はXXX.exe(YYY.DLL)にあります 0xC0000005:Access Violationというエラーが出ます。 エラーが出ている場所は int nRet = oraDyna.Open(*ZZZ, Sql); です。 ここを通過する時にエラーが発生します。 エラーの原因として何が考えられるでしょうか? 開発環境はWindows2000 VC++6.0です。 よろしくお願いします。

  • VC++でDeugモードOKで、Releaseモードのみでエラーが出る?

    マイクロソフトのVisualC++で テキストデータを処理するプログラミングしています。 (MFCは使っていません。) 使用してたプログラムの 一部の変数をクラス化しました。 数多くのエラーをかいくぐり、 Debugモードでは、 目的の演算を実行することができるようになりました。 ところが、 このプロジェクトをReleaseモードでビルド実行すると、 「trans1.exe の 0x0040d052 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x2eb11a94 に書き込み中にアクセス違反が発生しました。」 というエラーが出て止まってしまいます。 プロジェクトのプロパティ設定で、 ヒープ領域をDebugモードと 同じにしてみたりしたのですが、 状況は改善されません。 メモリの問題のような気がして、 配列の大きさ等をチェックしましたが、 問題なしでした。 プログラムを他の人が使えるように するためには、 Releaseモードが必要なので困っています。 どなたか、アドバイスかご教示お願いします。 デバッグ方法を教えて頂いても大変助かります。 よろしくお願いします。

  • 【Android開発】デバッグできなくなった

    Androidでアプリ開発をしています。 先週頃に1台のAndroid端末のAndroidバージョンを8.0にしてから、全ての端末でアプリの実機デバッグができなくなってしまいました。 端末を認識はするのですが、アプリが実機にインストールされずデバッグができない状況です。 Visual Studio(C++とNDKで開発する際に使用)、NetBeans(Javaで開発する際に使用)双方でこの状況になっています。 Visual Studioでは「Could not install application '(パッケージ名)' (<パッケージのパス>) on the device '(デバイスの識別ID?)'. Installation succeeded but the applications was not found on the device.」というエラーメッセージが、NetBeansではAndroid Development側に「Package deployment failed with: Unknown failure」というエラーメッセージが出ます。 ケーブルを変えたり、Google USB Driverを再インストールしたり、USBデバッグを再度許可しなおしたりしましたが、問題は解決されませんでした。 Visual Studio側では一応インストールはされたようなのですがデバッグができず、NetBeansではインストールすらされません。 現時点ではWindows側に問題があると疑っているのですが、原因を特定できません。 どのようにすれば実機デバッグができるようになるでしょうか。 解決法をご存知の方はお知らせいただけると幸いです。

  • FormのUnload時に例外が発生する

    開発環境 :Windows2000 :VisualBasic6.0 :Oracle9i :CrystalReports10 お世話になります。 現在、VB6でCrystalReportsの帳票を出力する画面を作成しております。 画面はDirListBoxとFileListBoxからプレビューしたい帳票を選択し、 「印刷」ボタンを押下することで帳票が表示される、シンプルな作りと なっております。 今回質問したい内容は、帳票出力後に画面をUnloadしようとすると例外が発生することについてです。 Unloadするとデバッガが起動し、 「VB6.EXE[4桁の数字(毎回異なる)]でハンドルされていないWin32の例外が発生しました。」 というエラーが発生し、利用可能なデバッガとしてインストールされている VisualStudio2005が表示されます。 デバッグを開始すると 「0559884F mov eax,dword ptr [ecx+4] 」 でデバッグが止まり、 「VB6.EXE の 0x0559884f でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000058 を読み込み中にアクセス違反が発生しました。」 が表示されます。 これはどういったエラーなのでしょうか? ちなみにプログラム側でUnload処理部分からブレークポイントを設けてデバッグを行うと、上記例外は発生しません。 わかる方がいらっしゃいましたら、回答願います。

  • 例外をキャッチした時にブレークすることはできますか?

    質問です。 Visual Studio 2008で、Visual Basicを使っての開発をしています。 デバッグモードでビルドした時、キャッチしていない例外が発生すれば 自動的にブレークしますが、これをキャッチしている例外に対しても 有効にするようなオプションはありますでしょうか? Web上でいろいろ探しても、情報が見つかりませんでした。 ご教授お願いします。

  • VB.NET で、デバッグができません。

    Windows-Xp_Pro 上でVB.NETを動かしたいと思っています。 個人のPC上で体験版VB.NETのインストールを終わり、ASP.NETwebアプリケーションプログラムのテスト実行時(ローカルモード)に、下記メッセージが表示されました。    Webサーバーでデバッグを開始できません。サーバーをデバッグ    する権限がありません。    サーバーのDebuggerUsersグループのメンバーであることを確認    して下さい。 Webアプリケーションが存在するPATH上のWeb.Configは「debug="true"」に設定してあります。 また、コントロールパネル→グループの「グループDebugger User」にもユーザーを追加してあります。 IIS, VB.NET は正常にインストールできました。セキュリティソフトは入っていますが、インストール時には特にエラーはありませんでした。 設定の問題とは思うのですが、どなたかエラーの原因がわかる方がおられましたら教えて頂きたいと思います。 なお、「デバッグなしで開始」をすれば正常に動きます。また、Windowsアプリケーションも問題なく動きます。 よろしくお願い致します。

専門家に質問してみよう