Windows BSOD から C++ を介して生成された memory.dmp ファイルから、情報、コード、フラグ、アドレスなどを読み取る必要があります。基本的な考え方は、ステータス情報をリモート サイトから要求でき、要求された情報の 1 つが、マシンで発生した最後の BSOD からの基本的な情報であるため、C++ を介してカーネル/メモリ ダンプ ファイルを開く必要があるということです (Im MSVC 2005 を使用)。
2 に答える
ここから始めて、WinDBG でスクリプト化されたコマンドを使用する方がはるかに簡単であることに気付きます。
注: クラッシュしたマシンではなく、解析マシンに WinDBG のみが必要です。ミニダンプを取得し、外部で分析します。唯一の問題は、適切なシンボルを取得することです。Windows の場合、Microsoft はシンボル サーバー経由でシンボルを利用できるようにしていますが、クラッシュの原因となったアプリケーションが必要な適切なシンボルを提供しない場合があります。クラッシュの原因となっているアプリケーションを所有している場合は、シンボル サーバーを取得して使用します。
バグチェックのパラメーターを含む小さなカーネル メモリ ダンプを作成するように Windows を構成します。
XP では 64KB でしたが、私の Win8.1 x64 では 256KB です。これらのファイルはよく圧縮されます。OS のビット数にもよりますが、サイズが 10 ~ 60KB の zip ファイルで問題を解決できるはずです。帯域幅が最も重要な場合は、7zを使用できます。7z はプレーンな zip アルゴリズムよりも約 50% 圧縮率が高くなりますが、圧縮時間が大幅に長くなります (5 ~ 6 倍長くなります)。ただし、このような小さなファイルの場合、CPU 時間の差は無関係。
ユーザーにダンプ レポートを構成させたくない場合は、DWORD を設定する必要があります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
プログラムによる小さなカーネル ダンプの場合は 3 まで。
値の説明については、http://technet.microsoft.com/en-us/library/cc976050.aspxを参照してください。
- 0 デバッグ情報はファイルに書き込まれません。
- 1 完全なクラッシュ ダンプがファイルに書き込まれます。
- 2 カーネル メモリ ダンプがファイルに書き込まれます。
- 3 小さなメモリ ダンプがファイルに書き込まれます。
デフォルトでは、%SystemRoot%\MEMORY.DMP に小さなカーネル ダンプが作成されます。