2012-06-08 7 views
5

Premièrement, existe-t-il une commande pour obtenir de l'aide et des paramètres pour chaque commande sos dans windbg?Veuillez expliquer SyncBlk la commande windbg

Deuxièmement, je voudrais comprendre !syncblk sortie

Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 
    201 05b9493c   979   1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 
2875 05b4c914   1   1 17b99e10 1af8 290 024862d8 MyClass 
2945 05b4b66c   1   1 17d1a290 12c0 752 02482940 MyClass 

MonitorHeld montre de moniteur # tenu par le synblk. 1 pour écrire et 2 pour lire, mais que signifie le reste de la colonne?

Dire que j'ai un code C#

MyClass MyObj; 
MyObj = new MyClass(); 

Maintenant, si je

lock (MyObj) 
{ 
} 

Est-ce que le spectacle de la colonne propriétaire syncblk "MyClass"? De même lorsque j'exécute cette commande !SyncBlk, que me montre-t-elle exactement? Est-ce qu'il me montre le nombre de lock() et Monitor.Enter et Mutex() et d'autres mécanismes de verrouillage?

Répondre

7

Pour obtenir de l'aide sur les commandes SOS, tapez !help ou !sos.help. Pour obtenir de l'aide sur des commandes spécifiques, tapez !help <command>. Les textes d'aide pour SOS sont également available online. La version en ligne vous donne un aperçu de la commande. Pour plus de détails, utilisez !help syncblk.

La sortie de !syncblk vous montre l'ID de thread (en-tête # 1 dans la sortie ci-dessous), l'objet et le type de l'objet utilisé pour verrouiller (en-tête # 2).

         +-------#1-------+ +-----#2------+ 
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 
    201 05b9493c   979   1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 
2875 05b4c914   1   1 17b99e10 1af8 290 024862d8 MyClass 
2945 05b4b66c   1   1 17d1a290 12c0 752 02482940 MyClass 

1) La première valeur est l'objet de fil, le deuxième est id fil natif et dernier est id de fil WinDbg.

2) La première valeur est l'objet utilisé pour verrouiller et la deuxième valeur est le type de cet objet. Ne couvre que les verrous .NET internes, Mutex (qui est un objet noyau) n'est pas couvert ici.

Dans votre exemple, l'ID de thread du code exécutant l'instruction lock apparaîtra avec l'adresse MyObj et le type MyClass.

+0

Pouvez-vous indiquer quelle colonne indique quelle valeur? il y a 2 colonnes syncblock. – bsobaid

+0

J'ai mis à jour ma réponse pour clarifier. S'il vous plaît laissez-moi savoir si ce n'est toujours pas clair. –

+0

Merci, et que signifient les colonnes 1,2 et 4? WinDbgId est utilisé pour explorer un thread? quelque chose comme ~ 45e! clrstack? Existe-t-il un moyen de connaître la ligne de code dans laquelle une ligne syncblock donnée contient/attend un thread? – bsobaid

Questions connexes