Silverlight Débogage avec WinDbg et SOS
Introduction
Dans le post précédent débogage Silverlight Avec Visual Studio , j'ai démontré que Visual Studio est un outil puissant et le plus commode pour le débogage des applications managées. Mais pour certains scénarios de débogage avancées, telles que fuite de mémoire, une impasse, emballement processus / thread, le débogage du noyau, et avancé le débogage à distance, etc / crash / AC, WinDbg (ou cdb, ntsd, kd) est généralement préféré, si ce n'est pas la seule option.
Outils de débogage pour Windows
Vue d'ensemble
WinDbg fait partie des outils de débogage pour Windows package:
Même si WinDbg est un programme graphique, il est surtout utilisé comme un débogueur en ligne de commande comme (et souvent avec) kd, cdb et ntsd, et partagent le moteur de débogage même et les commandes. Il est super puissant et extensible, particulièrement bien adapté pour le système / débogage de bas niveau comme les conducteurs et autres composants du système d'exploitation. Il ne nécessite une bonne connaissance du matériel, du système d'exploitation, et le compilateur pour obtenir le meilleur parti de la panoplie d'outils. C'est une grande (ou parfait, devrais-je dire
pour le débogage natif, avec ses commandes importantes et extensible et une interface utilisateur graphique. Support de débogage managé est par extension de débogage SOS, n'est pas aussi bon que le débogage natif, mais il ya une valeur inestimable pour être capable de faire le débogage intégré à travers la frontière géré et natif, et pour Silverlight, il est le seul outil dont je suis conscient de la qui permet de charger SOS et ne intégrées de débogage.
Commandes
WinDbg / cdb / ntsd / kd ont été autour depuis longtemps, de sorte qu'ils sont très bien documentés. Il est fortement recommandé que vous lisez sur les outils de débogage pour Windows sur microsoft.com et MSDN . Ici, je ne donne un bref aperçu de ses commandes, pour vous donner une idée et de référence rapide. Toutes les commandes sont livrés avec l'aide moment de l'exécution (par l'intermédiaire |?. Aide |! Help [<cmd>] comme on le verra ci-dessous), donc une vue d'ensemble est généralement suffisant pour obtenir votre commencé.
WinDbg a trois ensembles de commandes:
Standard Commands
Principalement:
- B * des commandes pour configurer / effacer / liste / activer / désactiver les points d'arrêt sur l'adresse ou l'accès
- D * des commandes pour examiner la mémoire (pile / tas, local / variables globales et les paramètres), E * commande de modifier la mémoire, et S * pour rechercher la mémoire
- K * des commandes pour examiner la pile des appels
- P, T, G * des commandes pour le contrôle d'exécution
ci-dessous? sortie de la commande est une excellente vue d'ensemble et de référence fréquente pour les personnes utilisant windbg / cdb / ntsd / kd:
0:006>?
Debugger.chm ouvert pour la documentation complète du débogueur
B [C | D | E] [<bps>] - effacer / désactiver / activer point d'arrêt (s)
BL - points d'arrêt liste
BA <access> <taille> <addr> - point d'arrêt du processeur ensemble
BP <adresse> - point d'arrêt doux
Vidage mémoire - D [type] [<plage>]
DT [-n | y] [[MOD] nom!] [[-N | Y] champs]
[Adresse] [L-list] [-a [] | c | i | o | r [#] | v] - les informations de type benne à l'aide
DV [<name>] - dump des variables locales
E [type] <adresse> [<Valeurs>] - entrez les valeurs de mémoire
G [H | N] [= <adresse> [<adresse> ...]] - aller
K <count> - stacktrace
KP <count> - stacktrace avec des arguments de source
LM [k | l | u | v] - Liste des modules
<expr> LN - symboles les plus proches liste
P [= <addr>] [<valeur>] - étape au cours
Q - quit
R [[<reg> [= <expr>]]] - Pour afficher ou ensemble des registres
Mémoire de recherche - S [<opts>] <plage> <Valeurs>
SX [{e | d | i | n} [-c "cmd1"] [-c2 "cmd2"] [-h] {Exception | Événement | *}] - filtre d'événement
T [= <adresse>] [<expr>] - trace dans
U [<plage>] - unassemble
version - spectacle débogué et la version débogueur
X [<* | module> <*!] | Symbole> - afficher les symboles de
? <expr> - l'expression d'affichage
? <expr> - affichage C + + expression
$ << Filename> - prendre l'entrée à partir d'un fichier de commandePressez la touche Entrée ...
<expr> unaire ops: + - non pas par wo dwo qwo poi Salut à faible
ops binaires: + - * / mod (%) et (&) xor (^) ou (|)
comparaisons:! == (=) <> =
opérandes: le nombre de courant radix, symbole public, <reg>
<type>: b (octet), w (mot), d [s] (mot double [avec des symboles]),
un (ascii), c (dword et Char), u (unicode), l (liste)
f (float), D (double), s | S (ASCII / Unicode string)
q (mot quadruple)
<motif>: [! (nt | <dll-name>)] <var-name> (? <var-name> peuvent comprendre *)
<plage>: <adresse> <adresse>
: L <adresse> <count>User-Mode Options:
De ~ - Liste des discussions statut
~ # S - fil par défaut du jeu
| - Liste des processus statut
| # S - processus par défaut ensembleoptions x86:
DG <selector> - sélecteur de décharge
<reg>: [e] hache, [e] bx, [e] cx, [e] dx, [e] si, [e] di, [e] pb, [e] sp, [e] ip, [ e] fl,
al, ah, bl, bh, cl, ml, dl, dh, cs, ds, es, fs, gs, ss
DR0, DR1, DR2, DR3, DR6, DR7
fpcw, fpsw, fptw, st0-st7, mm0-mm7
XMM0-xmm7
<flag>: iopl, de, df, si, tf, sf, zf, af, pf, cf
<addr>: # <16-bit de protéger en mode [seg:]> adresse,
& <V86-mode [seg:]address>Debugger.chm ouvert pour la documentation complète du débogueur
Commandes Meta
Ceux avec un point de départ, surtout pour le débogage avancé. Certaines commandes importantes que vous devez savoir:
- . Symfix et. SYMPATH pour l'utilisation de serveur de symbole
- . Srcfix et. Srcpath pour l'utilisation de serveur source
- . Charge,. Loadby,. Décharger,. Chaîne,. Setdll pour gérer les extensions de débogage
- . Serveur,. À distance pour le débogage à distance
Il vaut bien votre temps pour me familiariser avec le serveur symbole, le serveur source et le débogage à distance: ils vous rendront la vie beaucoup plus facile. est inférieure à la sortie de commande d'aide.:
0:006>. Aide
. commandes:
. Abandonner - d'abandonner le processus actuel
. Allow_exec_cmds [0 | 1] - commandes d'exécution de commande
. Allow_image_mapping [0 | 1] - le contrôle à la demande de mappage de fichier d'image
. Apply_dbp [<options>] - ajouter état actuel des données à un point d'arrêt
inscrire contexte
ASM [.] - <options> Définir des options de démontage
. Asm-[<options>] - options claires démontage
. Joindre <proc> - joindre à <proc> à la prochaine exécution
. Bloc {} <commandes> - entre parenthèses un ensemble de commandes pour l'exécution imbriquée
. Bpsync [0 | 1] - le comportement point d'arrêt spéciale pour debuggees multithread
. Pause - sortir de la boucle enfermant
. Breakin - pause dans KD
. Cache [<options>] - le contrôle virtuelle mémoire cache
. Appel <Fn> (<arg1>, <arg2>, ...) - exécuter une fonction dans le programme débogué
. Catch {} <commandes> captures accessoires des échecs dans les commandes
. Chaîne - la liste des extensions actuelles
. Childdbg <0 | 1> - processus enfant à son tour le débogage sur ou hors
. Clients: les clients liste actuellement actifs
. CloseHandle [<options>] [<handle>] - fermer le handle de donnée
. Continuer - continuer la boucle enfermant
. Copysym [<options>] <path> - copie des fichiers de symboles actuels vers un répertoire
. Créer <ligne - créer un nouveau processus
. Createdir [<options>] [<chemin>] - contrôle les options de création de processus
. <adresse> CXR - enregistrement de contexte de vidage à l'adresse indiquée
* k après ce qui donne pile CXR
. Dbgdbg - attacher un débogueur pour le débogueur de courant
. Debug_sw_wow [0 | 1] - permettre l'interaction avec l'émulation du logiciel WOW
. Détacher - se détacher de l'actuel processus / dump
. Dml_file <fichier> - contenu DML de sortie à partir du fichier
. Dml_flow <début> <addr> - spectacle débit de base du code bloc
. Dml_start [<options>] - Vue d'ensemble navigable de débogueur activités
. Do {} <commandes> (<cond>) - exécuter <commandes> jusqu'à <cond> est égal à zéro
Conducteurs. - Cette commande a été retirée -. Utilisation «LM» ou de rechargement l)
. Dump [<options>] <nomfichier> - créer un fichier de vidage sur le système hôte
. Dvalloc [<options>] <bytes> - mémoire VirtualAlloc dans le programme débogué
. Dvfree [<options>] <offset> <bytes> - mémoire VirtualFree dans le programme débogué
. Écho ["<chaîne>" | <string>] - chaîne d'écho
. Temps d'écho - le temps de sortie du débogueur
. Echotimestamps [0 | 1] - Sortie timestamp bascule sur les événements
. Ecxr - enregistrement de contexte de vidage d'exception en cours
. Effmach [<machine>] - changer le type de machine en cours
.} Else {<commandes> - if / then / else exécution conditionnelle
. Elsif (<cond>) {} <commandes> [<else clauses>] - if / then / else conditionnelle
exécution
. Enable_long_status [0 | 1] - dump type LONG dans la base par défaut
. Enable_unicode [0 | 1] - tableau USHORT dump / pointeurs et unicode cordes
. Endsrv <id> - désactiver le serveur du moteur donnée
. Endpsrv - provoquer un serveur distant de la session en cours pour sortir
. Enumtag - énumérer les données disponibles taggés
. Event_code - des instructions d'affichage d'événements mis en cache
. Eventlog - affichage du journal des événements récents
- Les événements. Afficher et de sélectionner les événements disponibles
. Eventstr - afficher toutes les chaînes d'événements enregistrés par débogué
. Exepath [<dir> [; ...]] - chemin de recherche ensemble exécutable
. Exepath + [<dir> [; ...]] - append chemin de recherche exécutable
. Expr - contrôle de l'expression évaluateur
. Exptr <adresse> -. Faire exr et CXR pour EXCEPTION_POINTERS.
. <adresse> Exr - enregistrement d'exception décharge à l'adresse indiquée
. Extmatch [<opts>] <motif> - afficher toutes les extensions correspondant au motif
. Extpath <opts> [<dir> [; ...]] - set path de recherche d'extension
. Extpath + <opts> [<dir> [; ...]] - append chemin de recherche d'extension
. F + - stack frame série actuelle à l'appelant de la trame actuelle
. F-- cadre fixé pile courant appelé du cadre actuel
<adresse> Fibres -. Définit le contexte de la fibre à l'adresse
contexte se réinitialise si aucune adresse indiquée
. Fiximports <motif> - les tentatives de lier les importations pour les images
<adresse> Fnent -. Entrée de la fonction de vidage pour l'adresse de code donné
. Fnret <fnaddr> [<retval>] - valeur de retour affichage formaté
. Pour (<init>; <cond>; <step>) {} <commandes> - exécuter <commandes> et
<step> jusqu'à <cond> est
zéro
. Force_radix_output [0 | 1] - les types entiers d'ordures de base par défaut
. Force_system_init [<options>] - systèmes de forces en attente pour initialiser si possible
. Force_tb - force permettent branche de traçage
. Foreach [opte] (<alias> {} <tcmds>) {} <ecmds> - exécuter <ecmds> pour
chaque jeton dans la
sortie de <tcmds>
. Fpo <options> - commande prioritaire FPO informations
. Cadre [<frame>] - cadre fixé pour les habitants de pile en cours
. Formats <expr> - résultat de l'expression écrans dans de nombreux formats
. Aide [<options>] - afficher l'aide
. Holdmem <options> [large] - maintenir et de comparer les données de la mémoire
. If (<cond>) {} <commandes> [<else clauses>] - if / then / else conditionnelle
exécution
. Ignore_missing_pages [0 | 1] - dump résumé le contrôle du noyau manque
message d'erreur la page
. Imgscan <options> - la mémoire de balayage pour les images PE
. Jdinfo <jdi_addr> - interpréter l'information AeDebug
. Kframes <count> - par défaut ensemble trace de la pile de profondeur
. Tuer - tuer le processus actuel
. Lastevent - afficher le dernier événement qui a eu lieu
. Quitter - quitter le enfermant attraper.
. Lignes - bascule de chargement symbole de ligne
<name> Charge -. Ajouter cette extension DLL à la chaîne d'extension
. Loadby <name> <mod> - ajouter la DLL d'extension dans le module
répertoire à l'extension de chaîne
. Locale [<locale>] - définir les paramètres régionaux en cours
. Logfile - le statut d'affichage du journal
. Logopen [<fichier>] - ouvrir le fichier log nouvelle
. Logappend [<fichier>] - ajouter dans le fichier journal
. Logclose - fichier journal proche
. Netsyms [0 | 1] - autoriser / interdire les chemins de symboles nets
. Netuse [<options>] - gérer les connexions nettes
. NoShell - commandes shell désactiver
. Noversion - désactiver la vérification de version de l'extension
. OFilter <motif> - filtre de sortie débogué contre le motif donné
. Ocommand <prefix> - sortie régal avec le préfixe donné comme une commande
. <fichier> Opendump - ouvrir un fichier de vidage
Les bits définis dans le masque courant de sortie - <masque> outmask.
. Outmask-<masque> - bits claires dans le masque courant de sortie
. PCMD [<options>] - le contrôle par-invite de commande
. Pop [<options>] - Etat pop
. Prefer_dml [0 | 1] - défaut de commande de mode DML
. Printf "<format>", <args…> - sortie formatée
. Processus [<adresse>] - définit processus implicite
par défaut réinitialise si aucune adresse indiquée
. Prompt_allow [<options>] - contrôle les informations peuvent être affichées
à l'invite
. Poussoir [<options>] - Etat poussoir
. Quit_lock [<options>] - serrures session contre quit inattendue
. Readmem <fichier> <plage> - lire la mémoire brute à partir d'un fichier
. Record_branches [0 |] - 1 commandes d'enregistrement de processeur ramification
. Reload [<image.ext> [= <adresse>, <size>]] - symboles de recharge
. Redémarrer - demander une session redémarrer
. Distance <pipename> - début remote.exe serveur
. Sécurisé [0 | 1] - les opérations de rejeter dangereux pour l'hôte
. Send_file <options> - envoyer des fichiers vers un serveur distant
. Serveur <options> - serveur de démarrage du moteur
- Serveurs. Serveurs de liste d'accès distant actifs
. Setdll <name> - débogueur chercher les prolongements de cette première DLL
. Shell [<commande>] - exécuter la commande shell
. Show_read_failures [<opts>] - commande de sortie supplémentaire échec de lecture
. Show_sym_failures [<opts>] - commande de sortie supplémentaire échec symbole
. Sommeil <millisecondes> - débogueur dort pour une durée donnée
utiles pour permettre l'accès à une machine qui est
cassé dans une ntsd-d
. Srcfix [<chemin extra>] - chemin de recherche de source fixe
. Srcfix + [<chemin extra>] - append chemin fixe recherche de la source
. Srcnoisy [0 | 1] - le contrôle de sortie verbeuse chargement à la source
. Srcpath [<dir> [; ...]] - set path recherche de la source
. Srcpath + [<dir> [; ...]] - chemin append recherche de la source
[. Step_filter <opts>] ["<motif> [; <motif> ...]»] - modèles de symboles
à sauter lors de l'intensification
. Symfix [<localsym>] - chemin de recherche correctif symbole
. Symfix + [<localsym>] - append chemin fixe de recherche de symbole
. Symopt <flags> - options de symboles
. Symopt + <flags> - options de symboles
. Symopt-<flags> - options symbole clair
. SYMPATH [<dir> [; ...]] - set path de recherche de symbole
. SYMPATH + [<dir> [; ...]] - append chemin de recherche symbole
. Thread [<adresse>] - jeux de contexte de thread à l'adresse
contexte par défaut réinitialise si aucune adresse indiquée
. Temps - affiche des informations temps de la séance
. THeure - affiche des informations thread temps
. Tlist - liste les processus en cours
. <flags> Typeopt - set / options de type claires
. Décharger <name> - supprimer ce DLL d'extension de la liste des DLL d'extension
. Unloadall - supprimer toutes les DLL d'extension de la liste des DLL des extensions
. Suite - se réveillent un débogueur sleep'ing.
. Tout (<cond>) {} <commandes> - exécuter <commandes> tout <cond> est non-nul
. <fichier> <plage> Writemem - écriture de la mémoire brute dans un fichierUtilisez ". Hh <commande>» ou Debugger.chm ouvert dans le répertoire des débogueurs pour obtenir
une documentation détaillée sur une commande.
Commandes d'extension
Ceux début avec!, Généralement pour un domaine particulier, comme des commandes d'extension SOS pour le débogage géré. Vous pouvez utiliser! <ext>. Aider à lister les commandes d'une extension, comme! Exts.help. Pour le débogage système avancé, comme la détection de fuite de mémoire, etc impasse, vous devez être très familier avec les commandes de vulgarisation.
SOS
Vue d'ensemble
SOS est l'acronyme de Fils de grève (ne me demandez pas pourquoi), une extension de débogage pour le débogage géré. Je crois qu'il a été inventé par CLR équipe pour le débogage CLR, de sorte qu'il a été autour depuis longtemps, et il ya beaucoup de bonnes informations sur le web. Quelques lectures recommandées:
- Extension de débogage SOS sur MSDN
- Blog de Jason Zander: débogage SOS de CLR
Chaque version du CLR dispose de son propre SOS (NET Framework 3.5 utilise toujours CLR 2.0 et Silverlight dispose de sa propre CLR.):
Répertoire de C: Program Files \ Debugging Tools for Windows \ clr10
19/09/2007 19:01 948784 sos.dll
1 Fichier (s) 948,784 octetsRépertoire de C: Program Files \ Microsoft Silverlight \ 2.0.31005.0
10/05/2008 02:16 495424 sos.dll
1 Fichier (s) 495,424 octetsRépertoire de C: \ Windows \ Microsoft.NET \ Framework \ v1.1.4322
07/15/2004 12:35 AM 319488 SOS.dll
1 Fichier (s) 319,488 octetsRépertoire de C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727
27/07/2008 10:03 392184 SOS.dll
1 Fichier (s) 392,184 octets
Commandes
Aide SOS moment de l'exécution est si grand que vous avez failli ne pas besoin de doc autre que d'essayer quelques-uns et de l'erreur et une certaine frustration ![]()
0:016>! Aide
---------------------------
SOS est une extension DLL débogueur conçu pour aider à la mise au point de la gestion
programmes. Les fonctions sont classées par catégorie, puis à peu près dans l'ordre de
importance. Noms de raccourci pour les fonctions populaires sont indiqués entre parenthèses.
Tapez "<functionname> aide!" Pour plus de détails sur cette fonction.Code d'inspection de l'objet de l'examen et des piles
--------------------
DumpObj (faire) Threads
DumpArray (da) clrstack
DumpStackObjects (DSO) IP2MD
Dumpheap U
DumpVC DumpStack
EEStack gcroot
ObjSize gcinfo
FinalizeQueue EHInfo
PrintException (EH) COMState
TraverseHeap BPMDL'examen des structures de données CLR utilitaires de diagnostic
--------------------
DumpDomain VerifyHeap
EEHeap VerifyObj
FindRoots Name2EE
SyncBlk HeapStat
DumpMT GCWhere
DumpClass ListNearObj (LNO)
GCHandles DumpMD
Token2EE GCHandleLeaks
EEVersion FinalizeQueue (fq)
FindAppDomain DumpModule
SaveModule ThreadPool
DumpAssembly Procinfo
DumpSigElem StopOnException (SOE)
DumpRuntimeTypes DumpLOG
DumpSig VMMap
Vmstat RCWCleanupList
DumpIL MinidumpMode
AnalyzeOOM (ao)L'examen de l'histoire GC Autres
--------------------
HistInit FAQ
HistStats
HistRoot
HistObj
HistObjFind
HistClear
Démonstration de débogage échantillon
Je vais utiliser la même application la plus simple de Silverlight dans post précédent ( Silverlight Débogage Avec Visual Studio ) pour démontrer WinDbg débogage avec SOS:
Voici le journal de débogage avec mes annotations (en commençant par / /):
/ / Mise en place chemin de symbole pour utiliser le serveur symbole
0:013>. SYMPATH
Chemin de recherche est Symbole: <empty>
0:013> symfix C: \ Users \ ningz \ AppData \ Local \ Temp \ Symboles
0:013>. SYMPATH
Chemin de recherche est Symbole: SRV * C: \ Users \ ningz \ AppData \ Local \ Temp \ Symboles \ * \ Symbols \ symboles/ / Ajouter le chemin pdb pour l'application en cours de débogage
0:013> SYMPATH +. "C: \ Users \ ningz Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1 \ Bin \ Debug"
Chemin de recherche symbole est: SRV * C: \ Users \ ningz \ AppData \ Local \ Temp \ * Symboles
http://msdl.microsoft.com/download/symbols;
C: \ Users \ ningz \ Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ Bin SilverlightApplication1 \ \ Debug/ / Recharger tous les symboles
0:013>. Reload
Rechargement modules actuels
/ / Mise en place du chemin source pour utiliser le serveur de source
0:013>. Srcpath
Chemin de recherche de source est: <empty>
0:013>. Srcfix
Chemin de recherche Source est la suivante: SRV *
0:013> srcpath +. "C: \ Users \ ningz Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1"
Chemin de recherche Source est la suivante: SRV *; C: \ Users \ ningz Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1/ / Charger SOS. S'il vous plaît noter:
/ / 1. il semble mscorwks est remplacé par CoreCLR dans Silverlight
/ / 2. . au lieu de loadby, vous pouvez également utiliser la charge. "C: Program Files \ Microsoft Silverlight \ 2.0.31005.0 \ sos.dll"
0:013>. Loadby sos CoreCLR
Loaded c: Program Files \ Microsoft Silverlight \ 2.0.31005.0 \ 'extension DLL sos/ / Définir un point d'arrêt pour le gestionnaire d'événement de clic de bouton
0:013>! BPMD SilverlightApplication1 SilverlightApplication1.Page.Button_Click
Trouvé 1 les méthodes ...
MethodDesc = 03983a30
Ajout des points d'arrêt en suspens ...
0:013> bl
0 e 0428215b 0001 (0001) 0: ****
0:013> g
Modload: 70800000 7080c000 C: Windowssystem32dwmapi.dll/ / Cliquez sur le bouton et se brisent en windbg
Breakpoint 0 hit
ATTENTION ***: Impossible de vérifier la somme de contrôle pour SilverlightApplication1.dll
! SilverlightApplication1 Button_Click:
04850398 55 PUSH EBP
Débogage intégré géré ne supporte pas l'énumération des variables locales.
Voir http://dbg/managed.htm pour plus de détails.
De traitement de trame Géré échoué, HRESULT 0x80004005/ / Comparer! Fils et de sortie ~ *
0:005>! Fils / / Liste les threads managés seulement
Threadcount: 3
UnstartedThread: 0
BackgroundThread: 3
PendingThread: 0
DeadThread: 0
Hosted Durée: oui
PreEmptive GC Alloc verrouillage
ID OSID ThreadOBJ Etat domaine Contexte GC Comptez Exception APT
5 1 1b08 043576e0 220 handicapés 04f9f214: 04f9ffe8 06f529d8 0 STA
9 2 928 043689c8 b220 Enabled 00000000:00000000 0433c738 0 MTA (Finalizer)
10 3 1220 1e8c 06f509d0 Enabled 00000000:00000000 0433c738 0 UKN
0:005> ~ * / / liste toutes les discussions
0 ID: 162c.1a28 Suspend: 1 Teb: 7ffde000 Unfrozen
Début: iexplore wWinMainCRTStartup (00a52d79)
Priorité: 0 Classe de priorité: 32 Affinité: 3
2 Id: 162c.1020 Suspend: 1 Teb: 7ffdc000 Unfrozen
Début:! :: Ole32 CRpcThreadCache RpcWorkerThreadEntry (76dfe0cc)
Priorité: 0 Classe de priorité: 32 Affinité: 3
3 Id: 162c.1e00 Suspend: 1 Teb: 7ffda000 Unfrozen
Début: ntdll TppWaiterpThread (778ab61b)
Priorité: 0 Classe de priorité: 32 Affinité: 3
4 Id: 162c.1f00 Suspend: 1 Teb: 7ffd9000 Unfrozen
Début: msvcrt _endthreadex 0 x6f (76162da8)
Priorité: 0 Classe de priorité: 32 Affinité: 3
. 5 Id: 162c.1b08 Suspend: 1 Teb: 7ffd8000 Unfrozen
Début:! :: IEFRAME CTabWindow _TabWindowThreadProc (6c163fdb)
Priorité: 0 Classe de priorité: 32 Affinité: 3
7 Id: 162c.170 Suspend: 1 Teb: 7ffd6000 Unfrozen
Début:! :: Npctrl CXcpDispatcher DispatcherTimerCallback (6a6d16f4)
Priorité: 0 Classe de priorité: 32 Affinité: 3
8 Id: 162c.1cd0 Suspend: 1 Teb: 7ffd5000 Unfrozen
Début:! :: CoreCLR DebuggerRCThread ThreadProcStatic (640eb5cd)
Priorité: 0 Classe de priorité: 32 Affinité: 3
9 Id.: 162c.928 Suspend: 1 Teb: 7ffd4000 Unfrozen
Début: CoreCLR Thread :: intermediateThreadProc (63fb8e4f)
Priorité: 0 Classe de priorité: 32 Affinité: 3
10 Id: Suspend 162c.1e8c: 1 Teb: 7ffd3000 Unfrozen
Début: CoreCLR Thread :: intermediateThreadProc (63fb8e4f)
Priorité: 0 Classe de priorité: 32 Affinité: 3
11 Id: Suspend 162c.1fac: 1 Teb: 7ffaf000 Unfrozen
Début:! :: Agcore CMulticoreTaskScheduler WorkerThread (660547de)
Priorité: 0 Classe de priorité: 32 Affinité: 3
12 Id: 162c.1b78 Suspend: 1 Teb: 7ffae000 Unfrozen
Début:! :: Agcore CMulticoreTaskScheduler WorkerThread (660547de)
Priorité: 0 Classe de priorité: 32 Affinité: 3
13 Id: 162c.1d18 Suspend: 1 Teb: 7ffdb000 Unfrozen
Début: ntdll RtlUserThreadStart (778c9a78)
Priorité: 0 Classe de priorité: 32 Affinité: 3
De traitement de trame Géré échoué, HRESULT 0x80004005
Débogage intégré géré ne supporte pas l'énumération des variables locales.
Voir http://dbg/managed.htm pour plus de détails./ / Comparer! Sortie clrstack & k
0:005>! Clrstack-p / / liste gérée cadres de pile seulement
Discussion OS Id: 0x1b08 (5)
ESP EIP
0450f850 04800398 SilverlightApplication1.Page.Button_Click (System.Object, System.Windows.RoutedEventArgs)
PARAMETRES:
ce (<CLR reg>) = 0x04f59c78
l'expéditeur (<CLR reg>) = 0x04f5b948
e (0x0450f854) = 0x04f9f1f00450f858 048cde0d System.Windows.Controls.Primitives.ButtonBase.OnClick ()
PARAMETRES:
ce (0x0450f864) = 0x04f5b9480450f870 048cdd10 System.Windows.Controls.Button.OnClick ()
PARAMETRES:
ce = <aucun data>0450f880 048cdc3d
PARAMETRES:
ce (0x0450f884) = 0x04f5b948
e (0x0450f880) = 0x04f9f1880450f890 048cdba1 System.Windows.Controls.Control.OnMouseLeftButtonUp (System.Windows.Controls.Control, System.EventArgs)
PARAMETRES:
ctrl = <aucun data>
e = <aucun data>0450f8a0 0483a0e7 MS.Internal.JoltHelper.FireEvent (IntPtr, IntPtr, Int32, System.String)
PARAMETRES:
unmanagedObj (0x0450f8f8) = 0x04355c48
unmanagedObjArgs (0x0450f8f4) = 0x0707be00
argsTypeIndex (0x0450f928) = 0x000000a9
eventName (0x0450f924) = 0x04f9f16c0450fa74 63ef17b0 [GCFrame: 0450fa74]
0450fb30 63ef17b0 [ContextTransitionFrame: 0450fb30]
0450fc28 63ef17b0 [UMThkCallFrame: 0450fc28]
0:005> KP / / liste de tous les cadres de pile
ChildEBP RetAddr
0450f868 048cde0d SilverlightApplication1! Button_Click (<HRESULT 0x80004001>)
0450f868 048cdd10 System_Windows! System.Windows.Controls.Primitives.ButtonBase.OnClick (<HRESULT 0x80004001>) +0 X5D
0450f878 048cdc3d System_Windows! System.Windows.Controls.Button.OnClick (<HRESULT 0x80004001>) +0 x48
0450f888 048cdba1 System_Windows! System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (<HRESULT 0x80004001>) +0 x85
0450f898 0483a0e7 System_Windows! System.Windows.Controls.Control.OnMouseLeftButtonUp (<HRESULT 0x80004001>) +0 x41
0450f91c 63ef17b0 System_Windows! MS.Internal.JoltHelper.FireEvent (<HRESULT 0x80004001>) +0 x1b7
0450f934 63ef5f98 CoreCLR! CallDescrWorker 0 x33
0450f9b0 63f032bc CoreCLR! CallDescrWorkerWithHandler 0 x8e
0450f9d0 63f0345c CoreCLR! ForwardCallToManagedMethod 0 x55
0450faf4 63fc4abf CoreCLR! DoUMThunkCallWorker 0 X199
0450fbe0 04c513d2 CoreCLR! DoUMThunkCall 0 x1b4
AVERTISSEMENT: IP du cadre n'est pas dans n'importe quel module connue. Les trames suivantes peut être erroné.
0450fc10 6607e0db 0x4c513d2
0450fc70 6a6dc1fc agcore! CCoreServices :: 0 CLR_FireEvent x183
De traitement de trame Géré échoué, HRESULT 0x80004005
0450fc84 npctrl 6a6dc187! CommonBrowserHost :: 0 CLR_FireEvent x2A
0450fcc8 6a6dc048 npctrl! CControlBase :: 0 ScriptCallback x366
0450fd08 6a6dc013 npctrl! CXcpDispatcher :: 0 OnScriptCallback XEE
0450fd14 npctrl 6a6dbfef! CXcpDispatcher :: 0 OnWindowMessage X3A
0450fd2c 7731f8d2 npctrl! CXcpDispatcher :: 0 WindowProc x7f
0450fd58 7731f794 User32! InternalCallWinProc 0 x23
0450fdd0 77320008 User32! UserCallWinProcCheckWow 0 x14b/ / Examiner tas, notons la commodité des tas d'objets fort typé,
/ / Au lieu de non-typés octets comme dans tas natif
0:005>! Dumpheap type SilverlightApplication1
Taille MT Adresse
04f4f31c 046336b0 36
04f59c78 04633a6c 68
total de 2 objets
Statistiques:
MT comte Nom de la classe TotalSize
046336b0 1 36 SilverlightApplication1.App
04633a6c 1 68 SilverlightApplication1.Page
Total des 2 objets
0:005>! Faire 04f59c78
Nom: SilverlightApplication1.Page
MethodTable: 04633a6c
EEClass: 0463196c
Taille: 68 (0x44) octets
Fichier: SilverlightApplication1, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
Domaines:
Champ MT Offset type VT Nom de la valeur Attr
047d97a0 40000dc 4 ... al.NativeResource 0 par exemple 04f5a5c0 m_nativePtr
04853ab8 40000df 8 ... System.Windows]] 0 par exemple 00000000 _valueTable
047d9874 40000e0 c ... reTypeEventHelper 0 par exemple 04f5a600 _coreTypeEventHelper
04856388 40000e3 10 ... bjet, mscorlib]] 0 par exemple 04f79a58 _treeChildren
047ae03c 40000e4 14 ... rnal.IManagedPeer 0 par exemple 00000000 _treeParent
03d50a90 40000dd 2B0 System.IntPtr 1 partagé StaticNativePointer statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 00000000 <<
03d50f28 40000de 2b4 System.Boolean 1 _isCoreCreate statique partagée
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 0 <<
047ae384 40000e1 8 .... DependencyObject 0 partagée PropertyReferencesHolder statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f489b8 <<
04661618 40000e2 c ... flection.Assembly 0 statique partagée _executingAssembly
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 00000000 <<
047d0b90 40000f1 18 ... rs.AutomationPeer 0 par exemple 00000000 m_pAP
047d7404 40000e8 10 ... ependencyProperty 0 partagée OpacityProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a4a8 <<
047d7404 40000e9 14 ... ependencyProperty 0 partagée ClipProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a4d0 <<
047d7404 40000ea 18 ... ependencyProperty 0 partagée RenderTransformProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a4f8 <<
047d7404 40000eb 1c ... ependencyProperty 0 partagée OpacityMaskProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a50c <<
047d7404 40000ec 20 ... ependencyProperty 0 partagée RenderTransformOriginProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a534 <<
047d7404 40000ed 24 ... ependencyProperty 0 partagée IsHitTestVisibleProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a548 <<
047d7404 40000ee 28 ... ependencyProperty 0 partagée VisibilityProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a570 <<
047d7404 40000ef 2c ... ependencyProperty 0 partagée RenderSizeProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a598 <<
047d7404 40000f0 30 ... ependencyProperty 0 partagée UseLayoutRoundingProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a5ac <<
00000000 4000108 0 1c par exemple 00000000 BindingValidationError
04856ae4 400010a 20 ... angedEventHandler 0 par exemple 00000000 DPChanged
048bc8a4 400010b 24 ... angedEventHandler 0 par exemple 00000000 DataContextChanged
03d50f28 400010c 2c System.Boolean une instance 0 _isDataContextBound
0481f43c 400010d 28 ... angedEventHandler 0 par exemple 00000000 _sizeChanged
047d7404 40000f2 34 ... ependencyProperty 0 partagée TriggersProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a144 <<
047d7404 40000f3 38 ... ependencyProperty 0 partagée ResourcesProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a158 <<
047d7404 40000f4 3c ... ependencyProperty 0 partagée LanguageProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a180 <<
047d7404 40000f5 40 ... ependencyProperty 0 partagée ActualWidthProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a194 <<
047d7404 40000f6 44 ... ependencyProperty 0 partagée ActualHeightProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a1a8 <<
047d7404 40000f7 48 ... ependencyProperty 0 partagée WidthProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a1bc <<
047d7404 40000f8 4c ... ependencyProperty 0 partagée HeightProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a1d0 <<
047d7404 40000f9 50 ... ependencyProperty 0 partagée MinWidthProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a1e4 <<
047d7404 40000fa 54 ... ependencyProperty 0 partagée MaxWidthProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a1f8 <<
047d7404 40000fb 58 ... ependencyProperty 0 partagée MinHeightProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a20c <<
047d7404 40000fc 5c ... ependencyProperty 0 partagée MaxHeightProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a220 <<
047d7404 40000fd 60 ... ependencyProperty 0 partagée HorizontalAlignmentProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a234 <<
047d7404 40000fe 64 ... ependencyProperty 0 partagée VerticalAlignmentProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a248 <<
047d7404 40000ff 68 ... ependencyProperty 0 partagée MarginProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a25c <<
047d7404 4000100 6c ... ependencyProperty 0 partagée StyleProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a284 <<
047d7404 4000101 70 ... ependencyProperty 0 partagée ParentProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a2ac <<
047d7404 4000102 74 ... ependencyProperty 0 partagée NameProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a2c0 <<
047d7404 4000103 78 ... ependencyProperty 0 partagée TagProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a2d4 <<
047d7404 4000104 7c ... ependencyProperty 0 partagée TagInternalProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a2fc <<
04851464 4000105 80 ... ndows.RoutedEvent 0 partagée LoadedEvent statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a420 <<
047d7404 4000106 84 ... ependencyProperty 0 partagée CursorProperty statique
Domaine >>: Valeur 0433c738: NotInit 06f529d8: 04f5a440 <<
047d7404 4000107 88 ...ependencyProperty 0 shared static InstanceDelegateStoreProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a468 <<
047d7404 4000109 8c ...ependencyProperty 0 shared static DataContextProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a494 <<
047a1e2c 400010e 90 ...rence, mscorlib]] 0 shared static _staticDelegateList
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
00000000 4000264 30 ...angedEventHandler 0 instance 00000000 IsEnabledChanged
047d7404 4000252 430 ...ependencyProperty 0 shared static IsTabStopProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ce4 <<
047d7404 4000253 434 ...ependencyProperty 0 shared static TabIndexProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59cf8 <<
047d7404 4000254 438 ...ependencyProperty 0 shared static TemplateProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d20 <<
047d7404 4000255 43c ...ependencyProperty 0 shared static TabNavigationProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d48 <<
047d7404 4000256 440 ...ependencyProperty 0 shared static PaddingProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d70 <<
047d7404 4000257 444 ...ependencyProperty 0 shared static HorizontalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d98 <<
047d7404 4000258 448 ...ependencyProperty 0 shared static VerticalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dc0 <<
047d7404 4000259 44c ...ependencyProperty 0 shared static BackgroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59de8 <<
047d7404 400025a 450 ...ependencyProperty 0 shared static BorderBrushProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dfc <<
047d7404 400025b 454 ...ependencyProperty 0 shared static BorderThicknessProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e10 <<
047d7404 400025c 458 ...ependencyProperty 0 shared static FontSizeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e24 <<
047d7404 400025d 45c ...ependencyProperty 0 shared static FontFamilyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e4c <<
047d7404 400025e 460 ...ependencyProperty 0 shared static ForegroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e60 <<
047d7404 400025f 464 ...ependencyProperty 0 shared static FontWeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e88 <<
047d7404 4000260 468 ...ependencyProperty 0 shared static FontStyleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eb0 <<
047d7404 4000261 46c ...ependencyProperty 0 shared static FontStretchProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ed8 <<
047d7404 4000262 470 ...ependencyProperty 0 shared static DefaultStyleKeyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eec <<
047d7404 4000263 474 ...ependencyProperty 0 shared static IsEnabledProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f00 <<
04857f14 4000265 478 ... System.Windows]] 0 shared static _resourceDictionaryCache
>> Domain:Value 0433c738:NotInit 06f529d8:04f5cae4 <<
03cf5668 4000266 47c System.Object[] 0 shared static _controlDelgates
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f14 <<
047d7404 4000501 77c ...ependencyProperty 0 shared static ContentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59cd0 <<
04852580 4000002 34 ...ows.Controls.Grid 0 instance 04f79770 LayoutRoot
04852a10 4000003 38 ...s.Controls.Button 0 instance 04f5b948 button
03d50f28 4000004 3c System.Boolean 1 instance 1 _contentLoaded// two lines above is the button object of the page object
// remember its address 04f5b948 , since we will refer to it later
// we can get the same address for the button object via dumpheap command:
0:005> !dumpheap -mt 04852a10
Address MT Size
04f5b948 04852a10 92
total 1 objects
Statistics:
MT Count TotalSize Class Name
04852a10 1 92 System.Windows.Controls.Button
Total 1 objects
0:005> !gcwhere 04f5b948 // button is in gen0, since there is no GC yet
Address Gen Heap segment begin allocated size
04f5b948 0 0 04f40000 04f41000 04f9fff4 0x5c(92)
0:005> !gcroot 04f5b948 // see who's holding reference to the button object
Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
// registry references
ecx:Root: 04f59c78(SilverlightApplication1.Page)->
04f5b948(System.Windows.Controls.Button)->
edx:Root: 04f5b948(System.Windows.Controls.Button)->
// stack references
Scan Thread 5 OSTHread 1b08
ESP:450f860:Root: 04f5ca18(System.Windows.RoutedEventHandler)->
04f59c78(SilverlightApplication1.Page)->
04f5b948(System.Windows.Controls.Button)->
ESP:450f864:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f874:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f884:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f894:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f8d4:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f8e4:Root: 04f5b948(System.Windows.Controls.Button)->
Scan Thread 9 OSTHread 928
Scan Thread 10 OSTHread 1e8c
// domain references
DOMAIN(06F529D8):HANDLE(Pinned):46412f8:Root: 05f44260(System.Object[])->
04f45234(System.Collections.Generic.List`1[[System.Object, mscorlib]])->
04f59980(System.Object[])->
04f59c78(SilverlightApplication1.Page)->
04f5b948(System.Windows.Controls.Button)->
Managed frame processing failed, HRESULT 0x80004005
Integrated managed debugging does not support enumeration of local variables.
See http://dbg/managed.htm for more details.// examine the button object itself
0:005> !do 04f5b948
Name: System.Windows.Controls.Button
MethodTable: 04852a10
EEClass: 0482e5f0
Size: 92(0x5c) bytes
File: c:\Program Files\Microsoft Silverlight\2.0.31005.0\System.Windows.dll
Fields:
MT Field Offset Type VT Attr Value Name
047d97a0 40000dc 4 ...al.NativeResource 0 instance 04f5bd58 m_nativePtr
04853ab8 40000df 8 ... System.Windows]] 0 instance 04f5c0bc _valueTable
047d9874 40000e0 c ...reTypeEventHelper 0 instance 04f5bd88 _coreTypeEventHelper
04856388 40000e3 10 ...bject, mscorlib]] 0 instance 04f5bee8 _treeChildren
047ae03c 40000e4 14 ...rnal.IManagedPeer 0 instance 04f79770 _treeParent
03d50a90 40000dd 2b0 System.IntPtr 1 shared static StaticNativePointer
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
03d50f28 40000de 2b4 System.Boolean 1 shared static _isCoreCreate
>> Domain:Value 0433c738:NotInit 06f529d8:0 <<
047ae384 40000e1 8 ....DependencyObject 0 shared static PropertyReferencesHolder
>> Domain:Value 0433c738:NotInit 06f529d8:04f489b8 <<
04661618 40000e2 c ...flection.Assembly 0 shared static _executingAssembly
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
047d0b90 40000f1 18 ...rs.AutomationPeer 0 instance 00000000 m_pAP
047d7404 40000e8 10 ...ependencyProperty 0 shared static OpacityProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a4a8 <<
047d7404 40000e9 14 ...ependencyProperty 0 shared static ClipProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a4d0 <<
047d7404 40000ea 18 ...ependencyProperty 0 shared static RenderTransformProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a4f8 <<
047d7404 40000eb 1c ...ependencyProperty 0 shared static OpacityMaskProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a50c <<
047d7404 40000ec 20 ...ependencyProperty 0 shared static RenderTransformOriginProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a534 <<
047d7404 40000ed 24 ...ependencyProperty 0 shared static IsHitTestVisibleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a548 <<
047d7404 40000ee 28 ...ependencyProperty 0 shared static VisibilityProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a570 <<
047d7404 40000ef 2c ...ependencyProperty 0 shared static RenderSizeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a598 <<
047d7404 40000f0 30 ...ependencyProperty 0 shared static UseLayoutRoundingProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a5ac <<
00000000 4000108 1c 0 instance 00000000 BindingValidationError
04856ae4 400010a 20 ...angedEventHandler 0 instance 00000000 DPChanged
048bc8a4 400010b 24 ...angedEventHandler 0 instance 00000000 DataContextChanged
03d50f28 400010c 2c System.Boolean 1 instance 0 _isDataContextBound
0481f43c 400010d 28 ...angedEventHandler 0 instance 00000000 _sizeChanged
047d7404 40000f2 34 ...ependencyProperty 0 shared static TriggersProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a144 <<
047d7404 40000f3 38 ...ependencyProperty 0 shared static ResourcesProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a158 <<
047d7404 40000f4 3c ...ependencyProperty 0 shared static LanguageProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a180 <<
047d7404 40000f5 40 ...ependencyProperty 0 shared static ActualWidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a194 <<
047d7404 40000f6 44 ...ependencyProperty 0 shared static ActualHeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1a8 <<
047d7404 40000f7 48 ...ependencyProperty 0 shared static WidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1bc <<
047d7404 40000f8 4c ...ependencyProperty 0 shared static HeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1d0 <<
047d7404 40000f9 50 ...ependencyProperty 0 shared static MinWidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1e4 <<
047d7404 40000fa 54 ...ependencyProperty 0 shared static MaxWidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1f8 <<
047d7404 40000fb 58 ...ependencyProperty 0 shared static MinHeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a20c <<
047d7404 40000fc 5c ...ependencyProperty 0 shared static MaxHeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a220 <<
047d7404 40000fd 60 ...ependencyProperty 0 shared static HorizontalAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a234 <<
047d7404 40000fe 64 ...ependencyProperty 0 shared static VerticalAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a248 <<
047d7404 40000ff 68 ...ependencyProperty 0 shared static MarginProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a25c <<
047d7404 4000100 6c ...ependencyProperty 0 shared static StyleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a284 <<
047d7404 4000101 70 ...ependencyProperty 0 shared static ParentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2ac <<
047d7404 4000102 74 ...ependencyProperty 0 shared static NameProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2c0 <<
047d7404 4000103 78 ...ependencyProperty 0 shared static TagProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2d4 <<
047d7404 4000104 7c ...ependencyProperty 0 shared static TagInternalProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2fc <<
04851464 4000105 80 ...ndows.RoutedEvent 0 shared static LoadedEvent
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a420 <<
047d7404 4000106 84 ...ependencyProperty 0 shared static CursorProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a440 <<
047d7404 4000107 88 ...ependencyProperty 0 shared static InstanceDelegateStoreProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a468 <<
047d7404 4000109 8c ...ependencyProperty 0 shared static DataContextProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a494 <<
047a1e2c 400010e 90 ...rence, mscorlib]] 0 shared static _staticDelegateList
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
00000000 4000264 30 ...angedEventHandler 0 instance 00000000 IsEnabledChanged
047d7404 4000252 430 ...ependencyProperty 0 shared static IsTabStopProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ce4 <<
047d7404 4000253 434 ...ependencyProperty 0 shared static TabIndexProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59cf8 <<
047d7404 4000254 438 ...ependencyProperty 0 shared static TemplateProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d20 <<
047d7404 4000255 43c ...ependencyProperty 0 shared static TabNavigationProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d48 <<
047d7404 4000256 440 ...ependencyProperty 0 shared static PaddingProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d70 <<
047d7404 4000257 444 ...ependencyProperty 0 shared static HorizontalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d98 <<
047d7404 4000258 448 ...ependencyProperty 0 shared static VerticalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dc0 <<
047d7404 4000259 44c ...ependencyProperty 0 shared static BackgroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59de8 <<
047d7404 400025a 450 ...ependencyProperty 0 shared static BorderBrushProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dfc <<
047d7404 400025b 454 ...ependencyProperty 0 shared static BorderThicknessProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e10 <<
047d7404 400025c 458 ...ependencyProperty 0 shared static FontSizeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e24 <<
047d7404 400025d 45c ...ependencyProperty 0 shared static FontFamilyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e4c <<
047d7404 400025e 460 ...ependencyProperty 0 shared static ForegroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e60 <<
047d7404 400025f 464 ...ependencyProperty 0 shared static FontWeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e88 <<
047d7404 4000260 468 ...ependencyProperty 0 shared static FontStyleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eb0 <<
047d7404 4000261 46c ...ependencyProperty 0 shared static FontStretchProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ed8 <<
047d7404 4000262 470 ...ependencyProperty 0 shared static DefaultStyleKeyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eec <<
047d7404 4000263 474 ...ependencyProperty 0 shared static IsEnabledProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f00 <<
04857f14 4000265 478 ... System.Windows]] 0 shared static _resourceDictionaryCache
>> Domain:Value 0433c738:NotInit 06f529d8:04f5cae4 <<
03cf5668 4000266 47c System.Object[] 0 shared static _controlDelgates
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f14 <<
03cf44e8 40002b4 34 System.Object 0 instance 00000000 _treeContent
047d7404 40002b3 530 ...ependencyProperty 0 shared static ContentTemplateProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bd30 <<
047d7404 40002b5 534 ...ependencyProperty 0 shared static ContentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bd44 <<
03d50f28 40005aa 40 System.Boolean 1 instance 1 _isLoaded
03d50f28 40005ab 41 System.Boolean 1 instance 1 _isMouseCaptured
03d50f28 40005ac 42 System.Boolean 1 instance 0 _isSpaceKeyDown
03d50f28 40005ad 43 System.Boolean 1 instance 0 _isMouseLeftButtonDown
04852208 40005ae 48 System.Windows.Point 1 instance 04f5b990 _mousePosition
048b5f98 40005af 38 ...mation.Storyboard 0 instance 00000000 _currentState
03d50f28 40005b0 44 System.Boolean 1 instance 0 _suspendStateChanges
0481fae0 40005b1 3c ...outedEventHandler 0 instance 04f5ca18 Click
047d7404 40005a6 7e0 ...ependencyProperty 0 shared static ClickModeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5ba7c <<
047d7404 40005a7 7e4 ...ependencyProperty 0 shared static IsFocusedProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bb38 <<
047d7404 40005a8 7e8 ...ependencyProperty 0 shared static IsMouseOverProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bbd8 <<
047d7404 40005a9 7ec ...ependencyProperty 0 shared static IsPressedProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bc40 <<// dump button.Click field (9 lines above)
0:005> !do 04f5ca18
Name: System.Windows.RoutedEventHandler
MethodTable: 0481fae0
EEClass: 0482c99c
Size: 32(0x20) bytes
File: c:\Program Files\Microsoft Silverlight\2.0.31005.0\System.Windows.dll
Fields:
MT Field Offset Type VT Attr Value Name
03cf44e8 40001e0 4 System.Object 0 instance 04f59c78 _target
04663c58 40001e1 8 ...ection.MethodBase 0 instance 00000000 _methodBase
03d50a90 40001e2 c System.IntPtr 1 instance 463c08c _methodPtr
03d50a90 40001e3 10 System.IntPtr 1 instance 0 _methodPtrAux
03cf44e8 40001e4 14 System.Object 0 instance 00000000 _invocationList
03d50a90 40001e5 18 System.IntPtr 1 instance 0 _invocationCount0:005> !do -nofields 04f59c78 // verify _target is page
Name: SilverlightApplication1.Page
MethodTable: 04633a6c
EEClass: 0463196c
Size: 68(0x44) bytes
File: SilverlightApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null// verify _methodPtr points to Button_Click
// see how they are all linked together
0:005> ln 463c08c
(0463c08c) SilverlightApplication1.Page.Button_Click(System.Object, System.Windows.RoutedEventArgs)
0:005> u 463c08c // jit-ed method stub
SilverlightApplication1.Page.Button_Click(System.Object, System.Windows.RoutedEventArgs):
0463c08c b8303a6304 mov eax,4633A30h
0463c091 89ed mov ebp,ebp
0463c093 e900431c00 jmp SilverlightApplication1!Button_Click ( 04800398 )
0463c098 0000 add byte ptr [eax],al
0463c09a 0000 add byte ptr [eax],al
0463c09c 0000 add byte ptr [eax],al
0463c09e 0000 add byte ptr [eax],al
0463c0a0 0000 add byte ptr [eax],al
0:005> u eip // jit-ed native code
SilverlightApplication1!Button_Click:
04800398 55 push ebp
04800399 8bec mov ebp,esp
0480039b 83ec08 sub esp,8
0480039e 894dfc mov dword ptr [ebp-4],ecx
048003a1 8955f8 mov dword ptr [ebp-8],edx
048003a4 833d7435630400 cmp dword ptr ds:[4633574h],0
048003ab 7405 je SilverlightApplication1!Button_Click+0x1a (048003b2)
048003ad e8862a895f call coreclr!JIT_DbgIsJustMyCode (64092e38)
0:005> !ip2md 04800398
MethodDesc: 04633a30
Method Name: SilverlightApplication1.Page.Button_Click(System.Object, System.Windows.RoutedEventArgs)
Class: 0463196c
MethodTable: 04633a6c
mdToken: 06000008
Module: 046333b4
IsJitted: yes
CodeAddr: 04800398
0:005> !dumpil 04633a30
ilAddr = 047e03fe
IL_0000: nop
IL_0001: ret
When I have time, I may write a blog post on CLR internals, to demonstrate how objects are laid out in memory, how method calls are dispatched etc.
Conclusion
This is a long post, but still it barely constitute an overview of WinDbg and SOS. Good understanding of CLR is important for coding and debugging, WinDbg with SOS is the best tool to explore CLR and do advanced debugging. Hope this short yet long post will help you get started in exploring CLR and Silverlight. Merci!








Commentaires récents