Debugging i Visual Studio

Tags:    .net
Skrevet af Bruger #2730 @ 18.02.2009

Call Stack


Call stacken er en oversigt over hvilke metoder der har været kaldt fra starten af programmets start og til der hvor dit breakpoint er sat. Visual Studio holder simpelthen styr på hvilke metoder der har være besøgt, samt fra hvilken linie den nuværende metode (den metode man står i med sit breakpoint) er kaldt fra. Disse informationer i Call Stacken er naturligvis først tilgængelige når vi har startet programmet med et breakpoint og stoppet eksekveringen ved at have ramt et breakpoint. Et eksempel på dette kan ses i nedenstående screenshot:



Som det fremgår af ovenstående screenshot er call stacken en oversigt over de metoder der tidligere har været besøgt og for hver metode kald er der lagt en linie i Call Stack vinduet der beskriver det der tidligere er sket. I det viste vindue kan jeg se (bemærk at de nyeste er øverst, så hvis man vil læse det kronologisk skal man starte fra bunden) at det hele starter i min Main() metode, i linie 18 inden i min main metode kalder den min Form() metode. Fra Form() metoden kalder den i linie 17 min MetodeA() og fra linie 22 Kalder den MetodeB() og vi ender ved linie 27 i MetodeB(), hvor vi har vores nuværende breakpoint. Hvis man dobbeltklikker på en af de tidligere metodekald i Call Stacken viser den hvor i ens kode det er kaldt fra og man kan nu nemmere overskue den sti der har ført ind til dit breakpoint.

Immediate Vinduet


Immediate vinduet er lidt mere specielt, det viser ikke informationer omkring den aktuelle debugging, det er mere et hjælpemiddel. Immediate vinduet gør en bruger i stand til at eksekvere kode i den kontekst hvor det aktuelle breakpoint er. Bemærk at dette kræver at der er sat et breakpoint og at eksekveringen er stoppet ved det breakpoint. Det vi kan nu er at eksekvere kode i immediate vinduet i konteksten af programmet. Det betyder at man kan tilgå variable og iteratorer i den tilstand de har for nuværende i det kørende program. For at illustrere dette har jeg lavet nedenstående program, det er en lokal variabel og en løkke der tækker til 10.



Det interessante er nu at jeg sætter et breakpoint i den linie der skriver til min Console og bruger mit immediate vindue derfra.



Inden for immediate vinduet har jeg også fuld IntelliSense understøttelse, og alle funktioner kan eksekveres, hvis man eksekverer en der returnerer "void" så siger programmet at den ikke returnerer noget, det vil sige at det man skriver i princippet skal returnerer noget, hvilket alle mine eksempler gør.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (6)

User
Bruger #714 @ 18.02.09 11:36
Lækker artikel om et meget undervurderet emne (og noget jeg egentlig aldrig har fundet en artikel omkring), dog rigtig rigtig brugbart!
User
Bruger #5789 @ 23.02.09 21:02
Æv, nu kommmer der ikke flere lette .net sprog baserede spørgmål længere :)
User
Bruger #5789 @ 23.02.09 21:03
... og keep em comming.
User
Bruger #13669 @ 08.03.09 12:59
Argh, kan ikke læse det først, login boksen er hende over det!
User
Bruger #13669 @ 08.03.09 13:02
Så er det godt der er noget der hedder "vis kilde" :D
User
Bruger #8985 @ 07.06.11 01:14
Er det bare mig (eller rettere, Opera) eller bliver dele af billederne i denne artikel dækket af karmabarometret?
Du skal være logget ind for at skrive en kommentar.
t