Question

Lorsque NGEN est exécuté sur une application .NET managé lors de l'installation, et un vidage sur incident est récupéré à partir Windows Error Reporting pour l'application, comment pouvez-vous l'utiliser pour voir une trace de la pile, les variables, etc.?

Voici quelques informations concernant la question: Nous avons une application .NET qui obtient ngened lors de l'installation. Quand il tombe en panne en raison d'une exception non gérée .NET, l'accident est bucketted dans les rapports d'erreurs de Windows et que je suis en mesure de télécharger le fichier minidump.mdmp de winqual.microsoft.com.

Je mets minidump.mdmp dans un dossier contenant les fichiers .dbg pour la construction de l'application qui se est écrasé, et minidump.mdmp double-cliquez pour l'ouvrir dans une nouvelle instance de VS2008 SP1. Ma trace de la pile ressemble à ceci:

  

kernel32.dll! RaiseException () + 0x3D octets
      mscorwks.dll! RaiseTheExceptionInternalOnly () + 0x295 octets
      mscorwks.dll! JIT_Throw () + 0x130 octets
      MyApp.ni.exe! 000007feee74c84c ()
      [Cadres ci-dessous peuvent être incorrectes et / ou manquant, pas de symboles chargés de MyApp.ni.exe]
      0000000070000d5e ()
      MyApp.ni.exe! 000007feee611000 ()
      000000000300bf78 ()
      000000000300bf60 ()

La fenêtre Modules indique que les symboles sont chargés pour le système d'exploitation et .NET DLL, mais pour les modules d'application, je reçois ceci:

  

MyApp.exe -> Aucun symbole natif dans un fichier symbole
.       MyApp.ni.exe -> Aucun binaire correspondant trouvé
.       MyAppsLibrary.ni.dll -> Aucun binaire correspondant n'a été trouvé.

Était-ce utile?

La solution

La meilleure façon de déboguer ces décharges est avec Windows Debugger (Windbg, cdb ou ntsd) et de charger l'extension du débogueur SOS (vous pouvez rechercher SOS pour plus de détails).

Pour autant que je me rappelle, la partie NGEN'ed de chose ne devrait pas d'importance pour SOS aussi longtemps que vous avez l'EXE original et les symboles (Comme il est votre application, je vous ayiez la non ngen'ed exe et symboles).

Autres conseils

« Outils de débogage pour Windows » (en particulier, WinDBG) a un soutien limité pour les applications gérées. Fourni avec PDB, vous devriez être en mesure de voir la pile d'appels, y compris les références de ligne de source. Pour voir les valeurs des variables, vous aurez besoin d'utiliser le plug-in SOS, qui est plus difficile que l'ouverture juste la fenêtre de la pile d'appel.

Si vous êtes en mesure de demander aux clients d'exécuter votre application à nouveau, demandez-leur de l'exécuter avec la variable d'environnement suivante: COMPLUS_ZapDisable = 1 Ce CLR chemin ne charge pas les images natives lors de l'exécution de votre application et vous verrez vos modules habituels avec des symboles sur la pile.

http://referencesource.microsoft.com/faq.aspx

Est-ce de toute aide pour vous:

Le gars semble être en mesure de charger des symboles pour déboguer son application à partir de la décharge de l'accident, a eu un problème de chargement des symboles corrects mais quelqu'un a répondu à sa question.

Comme c'est le code managé, vous devrez peut-être définir la variable d'environnement _NT_EXECUTABLE_IMAGE_PATH pour pointer vers les dossiers dans lesquels vos executables vivent. Dans ce cas, vous devrez localiser le dossier dans le cache NativeImage qui pointe à vos assemblées. Le débogueur a besoin des images pour charger l'ensemble.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top