Win32: Y a-t-il une différence entre les mini / dumps complets du Dr. Watson et l’écriture de mon propre

J’ai une application qui plante parfois dans la version release; malheureusement, il semble que le système se bloque dans une DLL tierce. Tout en essayant de comprendre, j’ai nagé dans une mer de guides pratiques et de descriptions sur la manière dont Windows crée des vidages sur incident.

Je pensais à utiliser ce mini-dépot suggéré:

Obtenir une sauvegarde d’un processus qui se bloque au démarrage

Je prévoyais de laisser cette fonctionnalité dans le code afin que le dump soit toujours créé pour mon application sans avoir à configurer le PC au préalable. BTW, cette application n’est pas pour la dissortingbution; il sera jumelé à notre propre matériel, donc je ne m’inquiète pas de voir des utilisateurs aléatoires laisser des fichiers de vidage créer sur leurs machines si l’application se bloque.

Note complémentaire: tout le code est en C / C ++.

Existe-t-il une différence entre ce que Dr. Watson (drwtsn32.exe) et ce code produira pour moi?

Avec le Dr Watson, vous ne recevez les décharges que lorsque le Dr vous voit «écrasé». En utilisant l’API dumper, vous pourrez l’invoquer à partir de n’importe quel sharepoint l’application. Par exemple. vous pouvez trampoler l’assertion ordinaire pour vider au lieu d’afficher une boîte de dialog. D’après mon expérience, une fois que vous aurez pris en charge le dépotoir dans votre application, vous constaterez qu’il est plus facile d’enquêter, de résoudre et de résoudre divers problèmes, tout simplement parce que vous pouvez produire un cliché complet (ou même un minidump) à n’importe quel endroit qui vous convient. code.

Il n’y a pas beaucoup de différence, sauf que si vous créez votre propre minidump, vous avez plus de contrôle sur le niveau de détail qu’il contient. Par défaut, les mini-pompes ont la stack et des variables locales, mais créer les vôtres vous donne la possibilité de créer un vidage complet de la mémoire, ce qui peut s’avérer plus utile (bien que cela puisse rendre la collecte de ces dumps plus problématique si l’image mémoire est grand).

Si l’accident se produit assez fréquemment, il peut être intéressant de collecter quelques minidumps que drwatson (ou werfault dans Vista et les versions ultérieures) produit pour vous, car cela peut vous donner suffisamment d’informations. Si ce n’est pas le cas, vous avez la possibilité d’append votre propre filtre d’exception non géré. Une autre chose qui peut arriver est que le minidump que vous recevez est le site de l’accident plutôt qu’une exception de première chance qui aurait pu survenir. Créer vos propres minidumps signifie qu’il est plus probable que vous obteniez une trace de stack plus près du problème.

Une autre option, si vous avez une machine qui présente le problème le plus souvent, consiste à exécuter ADPlus en arrière-plan. Elle restra en attente jusqu’à ce que votre application se bloque ou lève des exceptions, puis génère des fichiers journaux utiles. Il fait la même chose que le filtre d’exception non géré, sauf qu’il ne nécessite aucune modification de votre application.

La chose la plus importante à surveiller est que MiniDumpWriteDump doit faire l’allocation de mémoire et les E / S de fichiers. L’appel depuis le processus en échec peut échouer si, par exemple, les structures de tas sont corrompues.

L’appel de MiniDumpWriteDump à partir d’un processus d’assistance fonctionne de la même façon que d’utiliser Dr. Watson, à la différence que vous avez le contrôle sur les options de vidage.

Lecture recommandée: blocage du chargeur dans MiniDumpWriteDump

Je ne pense pas. Bien que Dr Watson génère des vidages complets ou des mini-vidages, vous pouvez utiliser le débogueur ntsd à la place pour mieux contrôler les données incluses dans les vidages.

Les mini-pompes de Dr Watson sont suffisantes pour la plupart des choses, vous obtenez une stack d’appels et des variables. SI vous avez besoin de plus d’informations, ntsd vous propose de nombreuses options .

Le seul avantage de DrWatson est qu’il est livré pré-installé sur Windows.