Содержат ли мини-дампы временную метку сбоя? - PullRequest
0 голосов
/ 15 марта 2010

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, который содержит временные метки для каждого потока в процессе, но это не входит в мини-дампы, которые я видел.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2011

Вы можете получить значения времени сбоя и времени запуска процесса, используя API dbgeng. См. Каталог sdk Windbg для примера 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 ) );
}
0 голосов
/ 20 августа 2010

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

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

...