2010-03-15 4 views
0

MiscInfoStream в файле minidump содержит время создания процесса. Я хотел бы узнать, как долго процесс запускается до сбоя. Есть ли файл 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 отображает ту же информацию, в конце списка потоков)

Обратите внимание, что сегодня 15 марта, так что это почти наверняка отметка времени аварии. Я хотел бы программный способ получить это значение и значение «Время обработки».

Я нашел структуру MINIDUMP_MISC_INFO_3, которая содержит некоторую информацию о часовом поясе, но, похоже, не содержит времени исключения.

В некоторых файлах дампа есть ThreadInfoListStream, который содержит отметки времени для каждого потока процесса, но это не включено в мини-копии, которые я видел.

ответ

0

Я не думаю, что время исключения хранится в любом месте файла minidump. Структура исключения, конечно, не содержит эту информацию: 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. См. Каталог Windbg sdk для образца dumpstk - вы можете изменить его, чтобы получить эту информацию.

Мой код ниже предполагает, что вы добавили новый интерфейс запроса для интерфейса системных объектов 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)); 
} 
Смежные вопросы