Your SlideShare is downloading. ×
Beyond F5 - windbg et .Net
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Beyond F5 - windbg et .Net

1,613
views

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,613
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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