Impossible de charger SOS dans WinDbg

132

Contexte: Je suis nouveau sur WinDbg et j'essaie de le faire fonctionner pour la première fois. Je veux examiner un vidage de mémoire que j'ai pris à partir d'un site ASP.NET 4 en cours d'exécution hébergé dans IIS 7 sur Windows Server 2008 (x86) et téléchargé sur ma machine locale.

J'ai installé les outils de débogage et lancé WinDbg pour la première fois, ouvrant le vidage sur incident. Je suis allé à File | Chemin du fichier de*srv*c:\symbols*http://msdl.microsoft.com/download/symbols* symboles et définissez le chemin et attendez que tous les symboles se chargent.

En essayant de charger SOS, j'ai rencontré des problèmes. Tout d'abord, j'ai essayé la commande suivante ...

.loadby sos mscorwks

... et a reçu la réponse Unable to find module 'mscorwks'.

Après avoir parcouru le Web, j'ai essayé de charger mscorwks en exécutant la commande suivante ...

sxe ld mscorwks.dll
g

... et a reçu la réponse "Aucune erreur de débogage exécutable dans 'g'"

J'ai copié SOS.dll (à partir de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) dans le répertoire WinDbg, puis j'ai essayé ...

.load sos

... et a reçu l'erreur ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Je ne sais pas trop comment procéder. Je veux juste charger SOS et creuser autour de ce fichier de vidage. Toute aide serait grandement appréciée.

Pour info ... J'essaye d'ouvrir le fichier de vidage sur une version 64 bits de Windows 7 avec la version 64 bits de Windbg.

Kevin Babcock
la source

Réponses:

203

La dll d'exécution CLR a été renommée clr.dllavec .NET 4. Ainsi, pour charger la version correcte de SOS, vous devez ajuster votre .loadbycommande. C'est à dire

.loadby sos clr

De plus, si vous êtes sur 64 bits, vous devez également installer la version 32 bits des outils de débogage pour Windows afin de déboguer les applications 32 bits. Ils s'installent côte à côte, il n'y a donc aucun problème à avoir à la fois la version 32 bits et la version 64 bits sur la même machine.

Je déconseille de copier SOS.dll. SOS doit correspondre à la version exacte du framework, donc tant que vous le chargez à partir du répertoire du framework en utilisant .loadby, vous êtes prêt.

Brian Rasmussen
la source
Je trouve difficile d'obtenir les deux sur mon système, car les derniers installateurs détectent automatiquement le type de processeur. Connaissez-vous un indicateur de remplacement pour le msi? Je vais installer une ancienne version 32 bits de WinDbg, mais je ne sais pas à quoi m'attendre.
Dave
5
@Dave: Peut-être trop peu trop tard, mais selon la page Web d'installation trouvée ici: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx, vous pouvez choisir d'installer les packages redistribuables qui place les MSI pour chaque version d'architecture ici : C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools for Windows
Aaron Lerch
Si je dis que .loadby sos clrje reçois Unable to find module 'clr'. J'essaye de déboguer .NET 4 avec x64 WinDbg
Csaba Toth
2
@CsabaToth est-ce un vidage ou faites-vous du débogage en direct? Si vous effectuez un débogage en direct, le CLR n'a peut-être pas encore été chargé. Vous pouvez faire sxe ld clrpour arrêter lorsque le CLR a été chargé, puis vous pouvez charger SOS à ce stade.
Brian Rasmussen
@BrianRasmussen C'est un exécutable compilé. Si je regarde la fenêtre Modules, clr il est chargé.
Csaba Toth
18

La commande WinDbg 'g' signifie [Continuer]

Puisque vous ouvrez un fichier de vidage, il n'y a aucun moyen de «continuer», il ne contient que la mémoire de processus.

Donc , le message « No exécutables Erreur débogués dans« g » est logique dans votre cas , puisque le processus ne fonctionne .

Concernant le chargement de la version correcte de SOS, utilisez la commande suivante en fonction de la version .NET.

.NET 4 et supérieur .loadby sos

.NET 3.5 et 2 .load par sos mscorwks

.NET 1.0 et 1.1 .load clr10 \ sos

HerbalMart
la source
1

Les réponses ci-dessus doivent être améliorées, car au fil du temps, il a été plus facile de gérer le chargement sos.

JOHN ROBBINS a un bel article autour de lui, voyez que les serveurs de symboles Microsoft sont configurés dans le chemin du fichier de symboles et exécutez! Analysez -v sur l'invite windbg, cela fera l'affaire, il téléchargera les fichiers sos pertinents. Pour vérifier, exécutez .chain à l'invite et vous verrez la DLL chargée.

Kiran Prabhu
la source
0

Je viens de rencontrer un problème similaire lors du chargement de SOS et obtenait "le module spécifié n'a pas pu être trouvé". J'ai trouvé une solution différente, donc si les solutions ici ne vous aident pas, essayez ceci:

.loadby sos clr - le module spécifié est introuvable

Denis
la source