7
votes

Comment créer minidump d'un processus .NET lorsque une certaine exception de première chance se produit

Mon application jette InvalidcastException dans l'environnement QA, quelque chose que je ne peux pas reproduire dans le développement.

Je souhaite obtenir le miniDump au moment de l'exception. Je sais à propos de Adplus, mais je ne suis pas sûr de la manière de l'utiliser pour que cela crée le miniDump lorsque InvalidCastException est lancé. Apparemment, il ne distingue pas une exception .NET d'un autre. Peut-être que je me trompe et il y a un moyen. Ou, il y a un autre outil pour le faire. De préférence gratuit.

Quoi qu'il en soit, quelqu'un peut-il conseiller comment gérer ce problème?

Merci.

mise à jour

  1. La construction est une construction de débogage en QA et Dev. Toutefois, QA gère des scénarios complexes rendus possibles dans le laboratoire, que Devs ne peut pas reproduire. Par conséquent, j'ai besoin d'une capacité à faire de la décharge lors de la course à l'AQ.
  2. Je peux modifier le code et créer un minidup de code. Cependant, je souhaite une solution plus flexible, celle qui ne nécessite pas de modifier le code à chaque fois qu'un problème comme celui-ci se produit.

    mise à jour 2

    En réalité, j'ai "volé" le code de génération MiniDump de John Robbins Superassert.net à nouveau, il s'agit d'un code de génération minidup de certains points de béton, alors que j'ai besoin d'une approche plus flexible dans le style d'Adplus. L'approche de John Robbins est la création d'un script CDB, puis d'appeler le débogueur CDB avec ce script pour la fixer au processus et créer le décharge. Il n'utilise pas l'API MiniDumpwriDeRump.


2 commentaires

Une question rapide - avez-vous la ligne de code où se passe la distribution? L'environnement QA est-il compilé dans le mode 'Libération' plutôt que le mode «débogage»?


L'environnement QA est identique à Dev, en ce qui concerne la construction. Ce qui compte, c'est que l'environnement QA est distribué, tandis que Devs exécutent tout sur la même machine.


3 Réponses :


6
votes

Le moyen le plus simple consiste à le laisser passer de l'application, laissez l'utilisateur le signaler à Microsoft et inscrivez-vous à la déclaration d'erreur Windows.

Alternativement, vous pouvez la capturer à la main en utilisant le Superassert de John Robbins (ou un sous-ensemble de son code).

mise à jour (pour la solution non-code): Jetez un coup d'œil à Systems Internals ' procdump .


3 commentaires

La chose est que j'ai besoin d'une solution non interactive et j'en ai besoin maintenant.


Considérons ma deuxième solution, alors. Prendre un minidump du processus en cours d'exécution n'est pas trivial, je vous recommande donc d'utiliser le code de John Robbins.


En fait, j'ai "volé" le code de génération MiniDump de John Robbins Superassert.net à nouveau, il s'agit de code pour générer minidup de certains points de béton, alors que j'ai besoin d'une approche plus flexible dans le style d'Adplus



2
votes

C'est possible, vous devez .charger sos.dll dans votre script adplus. Ce Publication du blog montre comment.

Méfiez-vous des joies douteuses de débogage du code géré d'un minidump. Si vous rencontrez des exceptions difficiles à diagnostiquer, alors qu'il est toujours à QA, vous y allez-y à nouveau en production. Avec dragons respirant le feu ajouté alors. Prenez soin de la bonne exception non gérée la journalisation en écrivant un gestionnaire d'événements pour AppDomain.unhandleXception. Loging E.ExceptionObject.Tostring () donne une mine d'informations.


0 commentaires

3
votes

VOULEZ-VOUS probablement probablement utiliser MINIDUMUMPRODUMP API dans votre application C #? Regardez http: //blog.kalbach-software .de / 2008/12/13 / ECRIT-MINIDUMMUMMS-IN-C / Pour un exemple de code ou rechercher dans Internat pour MiniDumpwriDeDmp et C #.

Si vous utilisez Visual Studio 2010, vous pouvez charger MiniDump Direct dans Visual Studio (voir http://msdn.microsoft.com/en-us/library/d5zhxt22 (v = vs.100) .aspx )


1 commentaires

Mettez à jour la question sur la manière dont je crée le code MiniDump.