1

ミニダンプ ファイルの MiscInfoStream には、プロセスの作成時間が含まれています。クラッシュする前にプロセスが実行されていた時間を知りたいです。ミニダンプ ファイルには、例外のタイムスタンプがどこかに含まれていますか?

このダンプ ファイルの WinDbg は、次のように表示されます。これは、それがどこかにあることを意味します...

Debug session time: Tue Dec 29 15:49:20.000 2009 (GMT+0)
System Uptime: not available
Process Uptime: 0 days 0:33:03.000

(DumpChk は、ストリームのリストの最後に同じ情報を表示します)

今日は 3 月 15 日なので、これがほぼ確実にクラッシュのタイムスタンプであることに注意してください。その値と「プロセス稼働時間」の値をプログラムで取得する方法が必要です。

MINIDUMP_MISC_INFO_3タイムゾーン情報を含む構造体を見つけましたが、例外時間が含まれていないようです。

一部のダンプ ファイルには、プロセス内の各スレッドのタイムスタンプを含む ThreadInfoListStream が含まれているように見えますが、これは私が確認したミニダンプには含まれていません。

4

2 に答える 2

1

dbgeng API を使用して、クラッシュ時間とプロセス アップ時間の値を取得できます。dumpstk サンプルについては、Windbg sdk ディレクトリを参照してください。これを変更して、この情報を取得できます。

以下のコードは、システム オブジェクト 2 インターフェイスの新しいクエリ インターフェイスを新しいグローバル g_SysObjects に追加したことを前提としています。

IDebugSystemObjects2* g_SysObjects;

g_Control を IDebugControl から IDebugControl2 に変更しました。

#include <time.h>
void DumpUpTimeAndCrashTime()
{
    ULONG upTime = 0;

    g_SysObjects->GetCurrentProcessUpTime(&upTime);
    int days = upTime / (60*60*24);
    int hours = (upTime % (60*60*24)) / (60*60);
    int minutes = (upTime % (60*60))/60;
    int seconds = upTime % 60;
    printf("Process uptime %d days %02d:%02d:%02d.000\n", 
            days, hours, minutes, seconds);

    ULONG crashTime = 0;
    g_Control->GetCurrentTimeDate(&crashTime);
    time_t ct = crashTime;
    printf( "Crash time and date: %s", _ctime64( &ct ) );
}
于 2011-11-11T22:21:10.580 に答える
0

例外の時刻がミニダンプファイルのどこにも保存されていないと思います。例外構造には、確かに次の情報は含まれていません:http: //msdn.microsoft.com/en-us/library/ms680367%28VS.85%29.aspx

その他の情報構造体にはプロセスの開始時刻が含まれていますが、例外時刻は含まれていません:http: //msdn.microsoft.com/en-us/library/ms680389%28VS.85%29.aspx

ミニダンプのすべての可能な内容は、http://msdn.microsoft.com/en-us/library/ms680394%28v=VS.85%29.aspxで確認できます

于 2010-08-20T15:53:15.623 に答える