2010-03-15 30 views
0

小型轉儲文件中的MiscInfoStream包含進程創建時間。我想知道該進程在崩潰前運行了多久。 minidump文件是否在任何地方包含異常時間戳?Minidump文件是否包含崩潰的時間戳?

的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,其中包含進程中的每個線程的時間戳,但是這不包括在我見過的小型轉儲。

回答

0

您可以使用dbgeng api獲取崩潰時間和進程正常運行時間的值。請參閱Windbg sdk目錄中的dumpstk示例 - 您可以修改它以獲取此信息。下面

我的代碼假定你已經增加了對系統的新的查詢界面對象2接口轉換成一個新的全球g_SysObjects。

IDebugSystemObjects2* g_SysObjects; 

並將ID_GetControl從g_Control改爲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)); 
} 
相關問題