こんにちは。
ここで少し支援が必要です:
状況:
特定のドライバー バージョン以降、すべての nvidia カード (GeForce 8400GS 以降) でブルー スクリーン オブ デスを引き起こす不明瞭な DirectX 9 アプリケーション (名前とアプリケーションの詳細は質問には関係ありません) があります。この問題は、DirectX 9 呼び出しまたはドライバーのバグをトリガーするフラグによって間接的に引き起こされていると思います。
目標:
問題のあるフラグ/関数呼び出しを追跡し (楽しみのために、これは私の仕事/宿題ではありません)、プロキシ dll を作成してエラー状態を回避したいと考えています。IDirect3D9、IDirect3DDevice9、IDirect3DVertexBuffer9、および IDirect3DIndexBuffer9 のラッパーを提供し、Direct3D 呼び出しの基本的なログ記録/トレースを提供する完成したプロキシ DLL が既にあります。ただし、クラッシュの原因となる機能を特定することはできません。
問題:
- ソースコードや技術サポートはありません。援助はなく、誰も問題を解決しません。
- カーネルによって生成されたメモリ ダンプは役に立ちませんでした - nv4_disp.dll 内でアクセス違反が発生したようですが、スタック トレースを使用して IDirect3DDevice9 メソッド呼び出しに移動することはできません。また、非同期でバグが発生する可能性もあります。
- (主な問題) Direct3D9Device メソッド呼び出しが多数あるため、それらをファイルまたはネットワーク経由で確実にログに記録できません。
- ファイルにログインすると、フラッシュしなくても速度が大幅に低下します。そのため、システムのBSODが発生すると、ログの最後の内容がすべて失われます。
- ネットワーク経由でのログ記録 (UDP および WINSOck を使用
sendto
) も大幅な速度低下を引き起こすため、非同期で実行してはなりません (非同期パケットは BSOD で失われます)。加えて、同期的に送信された場合でもパケット (クラッシュ周辺のもの) が失われることがあります。 - ルーチンのログ記録によってアプリケーションの速度が低下すると、BSOD が発生する可能性が低くなり、追跡が難しくなります。
質問:
私は通常、ドライバーを作成したり、このレベルのデバッグを行ったりしません。そのため、何か重要なものを見落としているような印象を受けました。カスタム ロギング メカニズムを使用して IDirect3DDevice9 プロキシ DLL を作成するよりも、問題を追跡する簡単な方法があります。 . それは何ですか?このような問題を診断/処理/修正する標準的な方法は何ですか (ソースコードなし、COM インターフェイスメソッドが BSOD をトリガーします)?
ミニダンプ解析(WinDBG) :
ユーザーシンボルの読み込み アンロードされたモジュールのリストをロードしています ………… イメージ nv4_disp.dll を読み込めません、Win32 エラー 0n2 *** 警告: nv4_disp.dll のタイムスタンプを確認できません *** エラー: モジュールのロードは完了しましたが、nv4_disp.dll のシンボルをロードできませんでした ****************************************************** **************************** * * * バグチェック分析 * * * ****************************************************** **************************** 詳細なデバッグ情報を取得するには、!analyze -v を使用します。 バグチェック 1000008E, {c0000005, bd0a2fd0, b0562b40, 0} おそらく原因: nv4_disp.dll ( nv4_disp+90fd0 ) フォローアップ: MachineOwner ---------- 0: kd> !analyze -v ****************************************************** **************************** * * * バグチェック分析 * * * ****************************************************** **************************** KERNEL_MODE_EXCEPTION_NOT_HANDLED_M (1000008e) これは非常に一般的なバグチェックです。通常、例外アドレスはピンポイントです 問題の原因となったドライバー/機能。このアドレスを常にメモしておいてください このアドレスを含むドライバー/イメージのリンク日付と同様に。 一般的な問題として、例外コード 0x80000003 があります。これは難しいことを意味します コード化されたブレークポイントまたはアサーションにヒットしましたが、このシステムは起動されました /NODEBUG. 開発者は決して起こらないはずなので、これは起こるべきではありません リテール コードにハードコーディングされたブレークポイントですが、... これが発生した場合は、デバッガーが接続されていることを確認してください。 システムが起動されます /DEBUG。これにより、このブレークポイントが ハプニング。 引数: Arg1: c0000005、処理されなかった例外コード Arg2: bd0a2fd0、例外が発生したアドレス Arg3: b0562b40、トラップ フレーム Arg4: 00000000 デバッグの詳細: ------------------ EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx" の命令が "0x%08lx" のメモリを参照しました。メモリを "%s" にすることはできません。 FAULTING_IP: nv4_disp+90fd0 bd0a2fd0 39b8f8000000 cmp dword ptr [eax+0F8h],edi TRAP_FRAME: b0562b40 -- (.trap 0xffffffffb0562b40) エラーコード = 00000000 eax=00000808 ebx=e37f8200 ecx=e4ae1c68 edx=e37f8328 esi=e37f8400 edi=00000000 eip=bd0a2fd0 esp=b0562bb4 ebp=e37e09c0 iopl=0 nv up ei pl nz na po nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010202 nv4_disp+0x90fd0: bd0a2fd0 39b8f8000000 cmp dword ptr [eax+0F8h],edi ds:0023:00000900=???????? デフォルトのスコープのリセット CUSTOMER_CRASH_COUNT: 3 DEFAULT_BUCKET_ID: DRIVER_FAULT BUGCHECK_STR: 0x8E LAST_CONTROL_TRANSFER: bd0a2e33 から bd0a2fd0 へ STACK_TEXT: 警告: スタック アンワインド情報は利用できません。次のフレームは間違っている可能性があります。 b0562bc4 bd0a2e33 e37f8200 e37f8200 e4ae1c68 nv4_disp+0x90fd0 b0562c3c bf8edd6b b0562cfc e2601714 e4ae1c58 nv4_disp+0x90e33 b0562c74 bd009530 b0562cfc bf8ede06 e2601714 win32k!WatchdogDdDestroySurface+0x38 b0562d30 bd00b3a4 e2601008 e4ae1c58 b0562d50 dxg!vDdDisableSurfaceObject+0x294 b0562d54 8054161c e2601008 00000001 0012c518 dxg!DxDdDestroySurface+0x42 b0562d54 7c90e4f4 e2601008 00000001 0012c518 nt!KiFastCallEntry+0xfc 0012c518 00000000 00000000 00000000 00000000 0x7c90e4f4 STACK_COMMAND: kb FOLLOWUP_IP: nv4_disp+90fd0 bd0a2fd0 39b8f8000000 cmp dword ptr [eax+0F8h],edi SYMBOL_STACK_INDEX: 0 SYMBOL_NAME: nv4_disp+90fd0 FOLLOWUP_NAME: MachineOwner MODULE_NAME: nv4_disp IMAGE_NAME: nv4_disp.dll DEBUG_FLR_IMAGE_TIMESTAMP: 4e390d56 FAILURE_BUCKET_ID: 0x8E_nv4_disp+90fd0 バケット_ID: 0x8E_nv4_disp+90fd0 フォローアップ: MachineOwner