11

アプリが一部の Vista マシンで GPF を引き起こしているという報告を受けています。エラーメッセージは次のようなものです。

0x75784062 でアクセス違反 (0x00000006 に書き込もうとした)

これを修正するには、まず誰がこの GPF を引き起こしているのかを正確に知る必要があります: 私のメインの exe、サード パーティのコンポーネント、私自身の ActiveX コンポーネントの 1 つ、DLL など...

どうすればこれを見つけることができますか?この混乱の原因となったモジュールを正確に特定できるツールは何ですか?

どんな助けでも大歓迎です。

PS 私のアプリは VB6 でコーディングされており、私の ActiveX コントロールは Delphi 2007 で書かれています。

4

6 に答える 6

10

私の提案は、 MadExcept link textまたは Eurekalog link text のいずれかを試すことです。これらは未処理の例外をキャプチャし、問題が発生した時点でスタック ダンプを生成します。

満足した顧客として以外、これらへのリンクはありません。MadExcept を使用すると、プログラムで非常にまれな問題を追跡して排除することができます。

于 2009-01-27T21:54:55.753 に答える
3

EurekalogmadExceptなど、例外が発生したときに優れたコールスタックを提供する何らかの例外フックをお勧めします。

もちろん、これは今あなたを大いに助けたいと思っています...

「エラーの検索」ダイアログでうまくいきませんでした。一般的に、一貫した失敗のケースと多くのステッピングが、唯一/最速/最も簡単な解決策です。初期化されていないポインターまたは解放されたオブジェクトの場合は、FastMM4 が適切な設定を支援することがあります。

于 2009-01-27T21:57:01.820 に答える
1

Debug Diagをインストールしてアプリを監視すると、DUMPファイルが生成され、分析されます。

于 2009-01-27T19:29:52.240 に答える
1

プログラムがクラッシュすると、Windows はクラッシュ ダンプを保存する必要があります。その後、これを WinDbg にロードするか、ピンチで Visual Studio にロードできます。ダンプを分析して何が問題なのかを調べるには、さまざまな方法があります。開始するには:

于 2009-01-27T19:04:40.310 に答える
0

SysInternalsサイトの Process Monitor または Process Explorer を使用できます。

于 2009-01-27T19:15:54.453 に答える
0

本当の理由は実際に例外が発生した場所にない可能性があるため、AV を追跡するのは難しい場合があります。一般的なヒント:

  1. 住所を見てください。DLL (ActiveX/OCX を含む) は、通常 0x50000000 を超える上位アドレスにロードされます (systemm DLL は通常 0x70000000 から 0x78000000 にあります)。あなたのAVはDLLで発生しているようです。最新バージョンの Windows アドレス空間負荷のランダム化では、実行ごとにアドレスが変わる可能性があることに注意してください
  2. コール スタックは、コードがどのようにして AV に到達したかを理解するのに非常に役立ちます。EurekaLog と MadExcept の他に、JCL/JVCL ライブラリがこれらの情報を取得するのに役立ちます。有用なコール スタックを取得するには、より多くのデバッグ情報 (およびマップ ファイル) を使用してコンパイルする必要がある場合があります。
  3. Delphi には、アプリケーションをロードし、デバッガで一時停止してからアドレスにジャンプできる Goto アドレス デバッグ機能があります。ただし、その間にアドレスが変更されていないことが必要です (変更を加えて再コンパイルすると、おそらくアドレスが変更され、ランダム化も行われます)。
  4. 開発マシンでエラーを再現できない場合は、リモート デバッガーを使用して、別のマシンで実行されているアプリケーションをデバッグできます。
于 2010-05-21T10:01:37.547 に答える