beyond f5 - windbg et .net

Post on 12-Jul-2015

1.640 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Yann Schwartz - blog.polom.com - yann@polom.com

Déboguer dans la nature,

diagnostiquer les problèmes

avec un outil le plus léger possible.

Debugging tools for Windows

http://microsoft.com/whdc/devtools/debugging

Au départ, un debugger natif (user mode et kernel), frontal de bibliothèques bas niveau.

windbg : debugger « graphique » cdb + kd (kernel debugger)cdb (console debugger) : idem que windbg mais en pure ligne de

commande et user mode seulementkd : kernel debugger (ligne de commande)

Pas d’installation nécessaire (le répertoire décompressé par l’installeur se suffit à lui-même)

sos (Son of Strike) extension pour le code managélivré avec chaque version du framework

sosexextension non MS de sosSteve Johnson - http://www.stevestechspot.com/

This is how the world ends,not with a bangbut a whimper. (TS Eliot – the Hollow men)

This is how sos begins,not with a whimperbut a bang.

!Help

.loadby sos mscorwkscharge la version de sos correspondant à la version du CLR de l’appli

.load sosexcharge sosex (doit être dans le répertoire de windbg/cdb)

.cmdtree [path]\cmd_tree.txtmenu de racourcis personnalisable

!DumpHeap –stat Instances du tas, regroupées par type, triées par taille totale

!ThreadsListe des threads managed

!runaway 7Exécute l’appli et classe les threads par temps CPU utilisé

! SyncBlkListe des locks pris ou attendus

! ClrStack [-a|-l|-p]Call stack CLR du thread courant, et variables et arguments courants

!GCRoot addrListe récursive des instances qui font que l’instance à [addr] reste en vie

~nInfos sur le thread n

~nsPasser au thread n

~e*!ClrStack –aExécuter une commande sur tous les threads

!dlkDétection automatique des deadlocks

!refs addrListe des références de et vers l’instance à addr

!mln addrType de l’objet CLR à l’adresse addr

Une brève histoire des langages de programmation user unfriendly

http://en.wikipedia.org/wiki/APL_%28programming_language%29

X[⍋X+.≠' ';]

http://en.wikipedia.org/wiki/J_%28programming_language%29

quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^:(1<#)

times=: (1 5&(+/ .*)@:* , (+/ .* |.)) " 1pow =: 4 : 'times/ 1 0 , times~^:(I.|.#:y) x' " 1 0f8a =: {. @ (0 1r5&times) @ (-/) @ ((1r2 1r2,:1r2 _1r2)&pow)

f8b =: {:@(1 1x&pow) % 2x&^@<:

http://en.wikipedia.org/wiki/Brainfuck

,>,>++++++[-<--------<-------->>] <<[ >[->+>+<<] >[-<<-[>]>>>[<[>>>-<<<[-]]>>]<<] >>>+ <<[-<<+>>] <<<] >[-]>>>>[-<<<<<+>>>>>] <<<<++++++[-<++++++++>]<.

~*e r? $t0 = @$teb; r? $t1 = @$t0+8; r? $t2 = @$t0+4; kv 100; dps poi(@$t1) poi(@$t2)

ad /q * .printf "\n Data Table : ${$arg1} \n"; .foreach (DataColumn {!do poi(poi(poi(${$arg1}+0x18)+0x8)+0x4) -v -short}){

.printf " Data Column : ${DataColumn} \t";$$ !do poi(${DataColumn}+0x28)!dumpfield -field _columnName ${DataColumn} -string

}.printf "\n";

Frontal Powershell de pilotage de windbghttp://www.codeplex.com/powerdbg

powershell –(stdin/out)-> cdb –(tcp)-> windbg

Fonctions simples pour lancer des commandes

Sortie standard de cdb traitée ligne à ligne

Scripts (et moteur) écrits en Powershell (une trentaine de scripts existants)

$null = Invoke-WindbgCommand .loadby sos mscorwks$output = Invoke-WindbgCommand ("!dumpheap -type " +

"System.Management.Automation.InvocationInfo -short")

foreach($line in $output) {

Resolve-Member $line commandInfo.name Resolve-Member $line scriptToken._scriptResolve-Member $line scriptToken._line

}

Disconnect-Windbg

Vaporwarewww.polom.com/linqdbg

linqdbg (.Net) -> cdb

var objs = from instance in Linqdbg.HeapStats()where instance.Type.IsAssignableFrom(typeof(Toto))orderby instance.TotalSize desc;

var leaked = from instance in objsselect instance.GCRoot();

Debugging MS .Net 2.0 Applications, MS Press, John Robbins

Windows Internals 5th edition, MS Press, Mark Russinovitch

Blog de Tess Ferrandez Blog de John Robbins

www.codeplex.com/powerdbg www.polom.com/linqdbg

top related