Configuration d'une condition «! Stoponexception» pour windbg via une ligne de commande / script de démarrage?

1

J'ai un problème avec une application que nous avons provoquée qui plante parfois avec une exception StackOverflowException dans du code .NET.

Malheureusement, l'application est en partie non gérée et en partie gérée, et pour une raison quelconque, le problème ne se pose que sur des machines autres que des développeurs.

Mon plan actuel consiste à utiliser WINDBG (une partie des outils de débogage pour Windows de Microsoft), installé sur les machines de testeurs, afin que WINDBG intercepte la création de l'exception en question.

En tant que tel, je peux faire ce qui suit:

sxe ld:mscorlib
g
.loadby sos clr
!stoponexception -create System.StackOverflowException
g

Malheureusement, comme ce problème ne se présente que tous les deux jours, et toutes les 50+ exécutions ou plus, je préfère éviter que les testeurs soient obligés de saisir tout ou partie de cela à chaque démarrage de cette application.

J'ai essayé de placer les commandes ci-dessus dans un fichier texte et de leur créer un raccourci comme ceci:

"...\windbg.exe" -c "$<c:\windbg.txt" -o "...\app.exe"

Cela lance le débogueur WINDBG, mais échoue malheureusement avec le message d'erreur suivant:

0:000> sxe ld:mscorlib
0:000> g
Command file caused an implicit wait
Command file execution failed, HRESULT 0x80004005
    "Unspecified error"

Donc, apparemment, gn'est pas autorisé dans un tel script de démarrage.

Est-il possible de faire ce que je veux? Puis-je automatiser ceci ou dois-je simplement préparer un fichier de commandes ou quelque chose utilisant autohotkey pour le faire?

Lasse Vågsæther Karlsen
la source

Réponses:

1

Bien qu'il soit tard mais je voulais néanmoins fournir une solution de contournement. J'ai rencontré le même problème et je suis tombé sur cette question tout en cherchant la réponse. J'ai plus tard découvert une solution de contournement.

La solution consiste à appeler le script à l'aide de $> <ou $$> <ou $$> a <afin que les commandes soient condensées en un seul bloc de commandes.

Voici le document d'aide de windbg

EPSILON
la source
0

Vous pouvez essayer de .dump /ma /u c:\app.dmpcréer un vidage sur incident pouvant être copié et analysé sur votre ordinateur.

Cependant, au lieu d'essayer de laisser l'utilisateur exécuter WinDbg sur sa machine, vous pouvez effectuer un vidage sur incident à l'aide de WER, le copier sur votre machine, puis analyser sans contrainte de temps. Voir Collecte de vidages en mode utilisateur pour créer des paramètres dans le registre qui stockent le vidage sur le disque.

Dans les deux cas, vous devez copier à partir de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 (ou Framework64):

Sinon, il se peut que votre version .NET diffère de sa version et que vous ne puissiez pas analyser le bogue.

Thomas Weller
la source