2010-03-15 1 views
0

미니 덤프 파일의 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이 있지만이 파일은 본 적이있는 미니 덤프에 포함되어 있지 않습니다.

답변

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

0

dbgeng api를 사용하면 충돌 시간 및 처리 시간에 대한 값을 얻을 수 있습니다. dumpstk 샘플을 보려면 Windbg sdk 디렉토리를 참조하십시오.이 정보를 얻기 위해 수정할 수 있습니다.

내 코드는 시스템 개체 2 인터페이스에 대한 새 쿼리 인터페이스를 새 전역 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)); 
}