2010-03-15 27 views
0

MiscInfoStream dans un fichier minidump contient le temps de création du processus. Je voudrais savoir combien de temps le processus a fonctionné avant le crash. Est-ce qu'un fichier minidump contient l'horodatage d'exception n'importe où?Les fichiers minidump contiennent-ils l'horodatage de l'incident?

WinDbg sur ce fichier de vidage affiche ce qui suit, ce qui implique qu'il est là quelque part ...

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 affiche les mêmes informations, à la fin de la liste des cours d'eau)

Notez que le 15 mars est donc certainement l'horodatage du crash. Je voudrais un moyen programmatique pour récupérer cette valeur et la valeur "Process Uptime".

J'ai trouvé la structure MINIDUMP_MISC_INFO_3, qui contient des informations sur le fuseau horaire, mais elle ne semble pas contenir le temps d'exception. Certains fichiers de vidage semblent avoir un ThreadInfoListStream, qui contient les horodateurs pour chaque thread dans le processus, mais ce n'est pas inclus dans les minidumps que j'ai vu.

Répondre

0

Je ne pense pas que l'heure de l'exception est stockée n'importe où dans le fichier minidump. La structure d'exception ne contient certainement pas cette info: http://msdn.microsoft.com/en-us/library/ms680367%28VS.85%29.aspx

struct info misc ne contient le temps de démarrage du processus, mais pas le temps d'exception: http://msdn.microsoft.com/en-us/library/ms680389%28VS.85%29.aspx

Vous pouvez voir tout le contenu possible d'un minidump ici : http://msdn.microsoft.com/en-us/library/ms680394%28v=VS.85%29.aspx

0

Vous pouvez obtenir les valeurs du temps de panne et de la durée de traitement à l'aide de l'API dbgeng. Voir le répertoire Windbg sdk pour l'exemple dumpstk - vous pouvez le modifier pour obtenir cette information.

Mon code ci-dessous suppose que vous avez ajouté une nouvelle interface de requête pour l'interface des objets système 2 dans un nouveau g_SysObjects global.

IDebugSystemObjects2* g_SysObjects; 

et changé g_Control de 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)); 
}