Beyond F5 - windbg et .Net

  • 1,598 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,598
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
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