2017-07-03 2 views
1

Seulement pour StackOverflow-exception, j'ai du mal à créer un MiniDump lors de la configuration de AddVectoredExceptionHandler à partir d'un processus qui a chargé le CLR.CLR/VectoredExceptionHandler/StackOverflowException/MiniDumpWriteDump

Mon gestionnaire est appelé, le fichier .dmp est créé, mais MiniDumpWriteDump échoue.

Je n'ai aucun problème à écrire la sauvegarde pour d'autres exceptions, par ex. Violation d'accès. Si le CLR n'est pas chargé et qu'un événement StackOverflow-exceptin se produit, l'extraction est également réussie.

Un exemple de code est fourni sur https://github.com/NicolaiNyberg/DbgSvcExtension où le projet CrashHandler dll configure les gestionnaires et SoexCh.Cs est un exemple d'appel de C#.

Ma question est: que se passe-t-il par rapport aux gestionnaires d'exceptions non gérées une fois que le CLR est chargé, ce qui empêche le processus d'écrire un mini-dump en cas d'exception StackOverflow?

+1

Il ne reste plus assez d'espace de pile pour permettre à MiniDumpWriteDump() de faire son travail. La génération minidump fiable nécessite un "processus de garde". Comme DebugDiag. –

+0

Merci Hans. Je viens de lire votre réponse et j'ai réalisé que ma réponse/solution est une implémentation de ce que vous suggérez. –

Répondre

0

solution Déplacé de la question à répondre:

Réponse/solution: Pour MiniDumpWriteDump réussir à partir d'une pile fracassé (StackOverflow-exception), alors il devrait être appelé à partir d'un thread de travail qui obtient signalé de l'exceptionHandler. Le CrashHandler a été mis à jour avec cette implémentation.

+0

En fait, _really_ devrait être dans un processus de chien de garde séparé (comme Hans suggéré dans son commentaire). Bien qu'un thread séparé puisse fonctionner pour les erreurs de stackoverflow, il peut ne pas suffire pour la corruption de statistiques (comme la violation d'accès) qui peut arroser tout le processus (cible/victime). –