Your SlideShare is downloading. ×
0
Beyond F5 - windbg<br />Yann Schwartz -  blog.polom.com  - yann@polom.com <br />
Oui mais pourquoi ?<br />Déboguer dans la nature,<br />diagnostiquer les problèmes<br />avec un outil le plus léger possib...
Windbg   - cdb - kd<br />Debuggingtools for Windows<br /> http://microsoft.com/whdc/devtools/debugging<br />Au départ, un ...
sos et sosex<br />sos (Son of Strike) <br />	extension pour le code managé<br />livré avec chaque version du framework<br ...
sos<br />This is how the world ends,<br />not with a bang<br />but a whimper.		(TS Eliot – the Hollow men)<br />This is ho...
Avant de commencer<br />.loadbysosmscorwks<br />charge la version de sos correspondant à la version du CLR de l’appli<br /...
Commandes amusantes<br />!DumpHeap –stat <br />Instances du tas, regroupées par type, triées par taille totale<br />!Threa...
Encore des commandes<br />! SyncBlk<br />Liste des locks pris ou attendus<br />! ClrStack [-a|-l|-p]<br />Call stack CLR d...
Toujours plus haut<br />~n<br />Infos sur le thread n<br />~ns<br />Passer au thread n<br />~e*!ClrStack –a<br />Exécuter ...
sosex<br />!dlk<br />Détection automatique des deadlocks<br />!refsaddr<br />Liste des  références de et vers l’instance à...
Interlude<br />Une brève histoire des langages de programmation user unfriendly<br />
APL<br />http://en.wikipedia.org/wiki/APL_%28programming_language%29<br />X[⍋X+.≠&apos; &apos;;] <br />
J<br />		http://en.wikipedia.org/wiki/J_%28programming_language%29<br />quicksort=: (($:@(&lt;#[) , (=#[) , $:@(&gt;#[)) (...
Brainfuck<br />http://en.wikipedia.org/wiki/Brainfuck<br />,&gt;,&gt;++++++[-&lt;--------&lt;--------&gt;&gt;] <br />&lt;&...
Scripts windbg<br />~*e r? $t0 = @$teb; r? $t1 = @$t0+8; r? $t2 = @$t0+4; kv 100; dps poi(@$t1) poi(@$t2)<br />ad /q * <br...
This isyourbrain on windbgscripting<br />
Powerdbg<br />Frontal Powershell de pilotage de windbg<br />http://www.codeplex.com/powerdbg<br />powershell  –(stdin/out)...
Un script Powerdb<br />$null = Invoke-WindbgCommand .loadby sos mscorwks$output = Invoke-WindbgCommand (&quot;!dumpheap -t...
Linqdbg<br />Vaporware<br />www.polom.com/linqdbg<br />linqdbg (.Net) -&gt; cdb<br />varobjs = from instance inLinqdbg.Hea...
Ressources<br />Debugging MS .Net 2.0 Applications, MS Press, John Robbins<br />Windows Internals 5th edition, MS Press, M...
Upcoming SlideShare
Loading in...5
×

Beyond F5 - windbg et .Net

1,633

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,633
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Beyond F5 - windbg et .Net"

  1. 1. Beyond F5 - windbg<br />Yann Schwartz - blog.polom.com - yann@polom.com <br />
  2. 2. Oui mais pourquoi ?<br />Déboguer dans la nature,<br />diagnostiquer les problèmes<br />avec un outil le plus léger possible.<br />
  3. 3. Windbg - cdb - kd<br />Debuggingtools for Windows<br /> http://microsoft.com/whdc/devtools/debugging<br />Au départ, un debugger natif (user mode et kernel), frontal de bibliothèques bas niveau.<br />windbg : debugger « graphique » cdb + kd (kernel debugger)<br />cdb (console debugger) : idem que windbg mais en pure ligne de commande et user mode seulement<br />kd: kernel debugger (ligne de commande)<br />Pas d’installation nécessaire (le répertoire décompressé par l’installeur se suffit à lui-même)<br />
  4. 4. sos et sosex<br />sos (Son of Strike) <br /> extension pour le code managé<br />livré avec chaque version du framework<br />sosex<br /> extension non MS de sos<br />Steve Johnson - http://www.stevestechspot.com/<br />
  5. 5. sos<br />This is how the world ends,<br />not with a bang<br />but a whimper. (TS Eliot – the Hollow men)<br />This is how sosbegins,<br />not with a whimper<br />but a bang.<br />!Help<br />
  6. 6. Avant de commencer<br />.loadbysosmscorwks<br />charge la version de sos correspondant à la version du CLR de l’appli<br />.loadsosex<br />charge sosex (doit être dans le répertoire de windbg/cdb)<br />.cmdtree[path]cmd_tree.txt<br />menu de racourcis personnalisable<br />
  7. 7. Commandes amusantes<br />!DumpHeap –stat <br />Instances du tas, regroupées par type, triées par taille totale<br />!Threads<br />Liste des threads managed<br />!runaway 7<br />Exécute l’appli et classe les threads par temps CPU utilisé<br />
  8. 8. Encore des commandes<br />! SyncBlk<br />Liste des locks pris ou attendus<br />! ClrStack [-a|-l|-p]<br />Call stack CLR du thread courant, et variables et arguments courants<br />!GCRootaddr<br />Liste récursive des instances qui font que l’instance à [addr] reste en vie<br />
  9. 9. Toujours plus haut<br />~n<br />Infos sur le thread n<br />~ns<br />Passer au thread n<br />~e*!ClrStack –a<br />Exécuter une commande sur tous les threads<br />
  10. 10. sosex<br />!dlk<br />Détection automatique des deadlocks<br />!refsaddr<br />Liste des références de et vers l’instance à addr<br />!mln addr<br />Type de l’objet CLR à l’adresse addr<br />
  11. 11. Interlude<br />Une brève histoire des langages de programmation user unfriendly<br />
  12. 12. APL<br />http://en.wikipedia.org/wiki/APL_%28programming_language%29<br />X[⍋X+.≠&apos; &apos;;] <br />
  13. 13. J<br /> http://en.wikipedia.org/wiki/J_%28programming_language%29<br />quicksort=: (($:@(&lt;#[) , (=#[) , $:@(&gt;#[)) ({~ ?@#)) ^:(1&lt;#) <br />times=: (1 5&(+/ .*)@:* , (+/ .* |.)) &quot; 1<br />pow =: 4 : &apos;times/ 1 0 , times~^:(I.|.#:y) x&apos; &quot; 1 0<br />f8a =: {. @ (0 1r5&times) @ (-/) @ ((1r2 1r2,:1r2 _1r2)&pow)<br />f8b =: {:@(1 1x&pow) % 2x&^@&lt;:<br />
  14. 14. Brainfuck<br />http://en.wikipedia.org/wiki/Brainfuck<br />,&gt;,&gt;++++++[-&lt;--------&lt;--------&gt;&gt;] <br />&lt;&lt;[ <br />&gt;[-&gt;+&gt;+&lt;&lt;] <br />&gt;[-&lt;&lt;- <br />[&gt;]&gt;&gt;&gt;[&lt;[&gt;&gt;&gt;-&lt;&lt;&lt;[-]]&gt;&gt;]&lt;&lt;] <br />&gt;&gt;&gt;+ <br />&lt;&lt;[-&lt;&lt;+&gt;&gt;] <br />&lt;&lt;&lt;] <br />&gt;[-]&gt;&gt;&gt;&gt;[-&lt;&lt;&lt;&lt;&lt;+&gt;&gt;&gt;&gt;&gt;] <br />&lt;&lt;&lt;&lt;++++++[-&lt;++++++++&gt;]&lt;.<br />
  15. 15. Scripts windbg<br />~*e r? $t0 = @$teb; r? $t1 = @$t0+8; r? $t2 = @$t0+4; kv 100; dps poi(@$t1) poi(@$t2)<br />ad /q * <br />.printf &quot; Data Table : ${$arg1} &quot;; <br />.foreach (DataColumn {!do poi(poi(poi(${$arg1}+0x18)+0x8)+0x4) -v -short}){    .printf &quot;     Data Column : ${DataColumn} &quot;;    $$    !do poi(${DataColumn}+0x28)    !dumpfield -field_columnName ${DataColumn} -string}.printf &quot; &quot;; <br />
  16. 16. This isyourbrain on windbgscripting<br />
  17. 17. Powerdbg<br />Frontal Powershell de pilotage de windbg<br />http://www.codeplex.com/powerdbg<br />powershell –(stdin/out)-&gt; cdb –(tcp)-&gt; windbg<br />Fonctions simples pour lancer des commandes<br />Sortie standard de cdb traitée ligne à ligne<br />Scripts (et moteur) écrits en Powershell (une trentaine de scripts existants)<br />
  18. 18. Un script Powerdb<br />$null = Invoke-WindbgCommand .loadby sos mscorwks$output = Invoke-WindbgCommand (&quot;!dumpheap -type &quot; +     &quot;System.Management.Automation.InvocationInfo -short&quot;) foreach($line in $output) {     Resolve-Member $line commandInfo.name     Resolve-Member $line scriptToken._script    Resolve-Member $line scriptToken._line} Disconnect-Windbg<br />
  19. 19. Linqdbg<br />Vaporware<br />www.polom.com/linqdbg<br />linqdbg (.Net) -&gt; cdb<br />varobjs = from instance inLinqdbg.HeapStats()             whereinstance.Type.IsAssignableFrom(typeof(Toto))             orderbyinstance.TotalSizedesc;             varleaked = from instance inobjs         selectinstance.GCRoot();<br />
  20. 20. Ressources<br />Debugging MS .Net 2.0 Applications, MS Press, John Robbins<br />Windows Internals 5th edition, MS Press, Mark Russinovitch<br />Blog de Tess Ferrandez<br />Blog de John Robbins<br />www.codeplex.com/powerdbg<br />www.polom.com/linqdbg<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×