Содержат ли файлы минидампа отметку времени сбоя?

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 выводит ту же информацию, в конце списка потоков)

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

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

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


person Roger Lipscombe    schedule 15.03.2010    source источник


Ответы (2)


Вы можете получить значения времени сбоя и времени работы процесса с помощью API dbgeng. См. каталог 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 ) );
}
person Tony Lee    schedule 11.11.2011

Я не думаю, что время исключения хранится где-либо в файле минидампа. Структура исключения определенно не содержит этой информации: http://msdn.microsoft.com/en-us/library/ms680367%28VS.85%29.aspx

Структура misc info содержит время запуска процесса, но не время исключения: 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

person Ted Mielczarek    schedule 20.08.2010