2010-02-19 4 views
3

J'ai utilisé MiniDumpWriteDump pour générer des fichiers de vidage lors d'un plantage. J'ai essayé de faire un vidage de la mémoire complète. Cela semble fonctionner et génère un fichier volumineux comme prévu.C++ MiniDumpWriteDump - FullMemoryDump ne me donne pas beaucoup d'informations

Toutefois, lorsque je charge ce fichier volumineux dans Visual Studio (2005), il ne semble pas que je puisse voir les valeurs des variables du tas. En fait cela ne me donne pas plus d'informations qu'un vidage normal ...

Mon appel à MiniDumpWriteDump est comme suit;

MINIDUMP_EXCEPTION_INFORMATION mdi; 

mdi.ThreadId = GetCurrentThreadId(); 
mdi.ExceptionPointers = in_pInfo; 
mdi.ClientPointers = FALSE; 

MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(), 
    fHan, 
    MiniDumpWithFullMemory, 
    &mdi, 
    0, 
    0); 

Note: J'ai un ensemble complet de années pdb, une pile valide, et dans ma demande de test je fais semblant d'avoir une erreur avec une division par zéro.

Une idée pourquoi tout cela est-il?

Vive Rich

+0

Avez-vous essayé avec WinDbg? Est-ce que ça marche là-bas? – Andy

+0

Est-ce que quelque chose en est sorti? –

Répondre

2

Probablement parce que vous n'avez pas les fichiers pdb corrects. Ou parce que votre code a été soumis à la version de chiffrement RSA de l'optimiseur. Ou parce que vous avez la construction x64 où les pointeurs sont passés dans les registres. Ou parce que votre code s'est écrasé en raison de la corruption du tas, rendant les informations de débogage également peu fiables. Ou la pile du fil qui s'écrase est grillée, ne laissant aucune miette de pain à suivre.

Faites votre choix.

+0

Eh bien, je suis en train de tester l'application, j'ai donc truqué une division par zéro. La pile est intacte, les pdb sont tous chargés et corrects. Cependant, je ne peux pas voir les valeurs des tas ou des variables globales. – Rich

+1

Mettez à jour votre question avec des informations cruciales comme ça. Ne rien dire à l'avance n'est qu'une perte de temps pour tout le monde. Vous devrez également documenter exactement les drapeaux MiniDumpWriteDump() que vous avez utilisés et ce que vous ne pouvez pas voir. –

+0

La question a été mis à jour. – Rich

Questions connexes