WinDBG : charger les bonnes extensions

Pour débugguer vos applications .NET, Microsoft propose un outil nommé WinDBG disponible dans le “Windows SDK".

WinDBG étant un debugueur natif, il a besoin d’extensions pour fonctionner avec les applications .NET. Ces extensions sont différentes en fonction de la technologie et de la version de .NET que votre application utilise (Silverlight / WPF / .NET 2.0 / .NET 4, etc.).

SOS

SOS.dll (Son Of Strike) est une DLL fournie lors de l’installation du framework .NET qui se trouve dans le répertoire : C:\Windows\Microsoft.NET\Framework\

Le chargement de cette DLL doit se faire différemment si votre application est développée en .NET 4 classique ou en Silverlight. En effet, Silverlight n’utilise qu’une partie du Framework .NET basée sur la DLL coreclr.dll et non clr.dll (mscorwks.dll pour .NET 2.0). Le module de cette extension à charger ne sera donc pas le même (clr pour .NET 4 et coreclr pour Silverlight).

Application .NET 4 :

.loadby sos clr

Application Silverlight :

.loadby sos coreclr

Pour avoir une liste exhaustive des commandes disponibles dans SOS, consultez la page MSDN associée. Nous reviendrons sur quelques unes d’entre elles dans les prochains articles.

SOSEX

SOSEX.dll est une extension développée par Steve Johnson qui apporte une trentaine de commandes. parmi elles :

  • !mk : affiche la stack managée et non-managée
  • !muf : désassemble une fonction (IL et ASM)

Malheureusement, SOSEX est liée à clr.dll rendant son utilisation impossible sur une application Silverlight.

SOSEX est disponible ici (x86/x64)

Chargement de SOSEX :

.load sosex

Pour obtenir la liste complète des commandes disponibles dans SOSEX, tapez la commande :

!help

après avoir chargé l’extension.

PSSCOR4

PSSCOR4 est une autre extension englobant SOS et ajoutant quelques commandes. Cette extension semble présenter quelques dysfonctionnements comme indiqué dans les commentaires du lien indiqué précédemment.

Note : Merci à Gaël Covain pour son aide.

.NET  Debug  WinDBG 

Voir également