Harjoitus – Virheenkorjaus Visual Studio Coden avulla
On aika toteuttaa hiljattain hankkimasi virheenkorjaustiedot käytännössä. Tämä on ensimmäinen päiväsi työssä, ja on aika laittaa .NET-virheenkorjaustaitosi toimimaan korjaamalla virhe yrityksen lippulaivatuotteessa, Fibonacci-laskimessa.
Luo .NET-malliprojekti virheenkorjausta varten
Jos haluat määrittää Visual Studio Coden .NET-virheenkorjausta varten, tarvitset ensin .NET-projektin. Visual Studio Code sisältää integroidun päätteen, mikä tekee uuden projektin luomisesta helppoa.
Valitse Visual Studio Codessa Tiedosto>Avaa kansio -.
Luo valitsemaasi sijaintiin uusi kansio nimeltä
DotNetDebugging. Valitse sitten Valitse kansio.Avaa integroitu pääte Visual Studio Codesta valitsemalla päävalikosta Näytä>Terminal.
Kopioi ja liitä seuraava komento pääteikkunaan:
dotnet new consoleTämä komento luo kansioosi Program.cs tiedoston, joka sisältää jo kirjoitetun "Hello World" -perusohjelman. Se luo myös C#-projektitiedoston nimeltä DotNetDebugging.csproj.
Suorita "Hello World" -ohjelma kopioimaan ja liittämään seuraava komento pääteikkunaan.
dotnet runPäätteen ikkuna näyttää tuloksena "Hello World!".
Määritä Visual Studio Code .NET-virheenkorjausta varten
Avaa Program.cs valitsemalla se.
Kun avaat C#-tiedoston Visual Studio Codessa ensimmäistä kertaa, näyttöön tulee kehotus asentaa C#:n suositellut laajennukset. Jos näet tämän kehotteen, valitse Asenna -painike kehotteessa.
Visual Studio Code asentaa C# -laajennuksen ja näyttää toisen kehotteen lisätä tarvittavia resursseja projektisi luomiseen ja virheenkorjaukseen. Valitse Kyllä - painike.
Voit sulkea Extension: C# -välilehden ja keskittyä virheenkorjauksessa käytettävään koodiin.
Fibonacci-ohjelman logiikan lisääminen
Nykyinen projektimme kirjoittaa konsoliin "Hello World" -viestin, joka ei anna meille paljoa virheenkorjauskohtaa. Sen sijaan käytät lyhyttä .NET-ohjelmaa fibonacci-sekvenssin N: n määrän laskemiseen.
Fibonacci-sekvenssi on numeropaketti, joka alkaa numeroista 0 ja 1, ja joka toinen numero on kahden edellisen summa. Jakso jatkuu tässä esitetyllä tavalla:
0, 1, 1, 2, 3, 5, 8, 13, 21...
Avaa Program.cs valitsemalla se.
Korvaa Program.cs sisältö seuraavalla koodilla:
int result = Fibonacci(5); Console.WriteLine(result); static int Fibonacci(int n) { int n1 = 0; int n2 = 1; int sum; for (int i = 2; i < n; i++) { sum = n1 + n2; n1 = n2; n2 = sum; } return n == 0 ? n1 : n2; }Muistiinpano
Tämä koodi sisältää virheenkorjauksen virheenkorjauksen tässä moduulissa. Emme suosittele sen käyttämistä tehtävän kannalta kriittisissä Fibonacci-sovelluksissa, ennen kuin korjaamme virheen.
Tallenna tiedosto valitsemalla Ctrl + S Windowsille ja Linuxille. Valitse Cmd+S- for Mac.
Katsotaanpa, miten päivitetty koodi toimii, ennen kuin korjaamme sen. Suorita ohjelma antamalla seuraava komento päätteeseen:
dotnet run
Tulos, 3, näkyy päätteen tulosteessa. Kun tarkastelet tätä Fibonacci-sekvenssikaaviota, joka näyttää nollapohjaisen jakson sijainnin kullekin sulkeessa olevalle arvolle, huomaat, että tuloksen olisi pitänyt olla 5. On aika tutustua virheenkorjaukseen ja korjata tämä ohjelma.
0 (0), 1 (1), 1 (2), 2 (3), 3 (4), 5 (5), 8 (6), 13 (7), 21 (8)...
Ongelmien analysointi
Käynnistä ohjelma valitsemalla vasemmalla oleva Suorita ja virheenkorjaus -välilehti ja valitsemalla sitten Aloita virheenkorjaus -painike. Sinun on ehkä valittava ensin Suorita ja Korjaa -painike ja valitse sitten Program.cs tiedosto.
Ohjelman pitäisi päättyä nopeasti. Tämä on normaalia, koska et ole vielä lisännyt keskeytyskohtia.
Jos virheenkorjauskonsolia ei näy, valitse Ctrl + vaihto + Y Windowsille ja Linuxille tai Cmd+ Vaihto + Y for Macille. Sinun pitäisi nähdä useita diagnostiikkatietorivejä, joita seuraavat rivit lopussa:
... Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.0\System.Threading.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.0\System.Text.Encoding.Extensions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 3 The program '[88820] DotNetDebugging.dll' has exited with code 0 (0x0).
Yläreunan rivit kertovat, että virheenkorjauksen oletusasetuksissa otetaan käyttöön Just My Code -asetus. Tämä tarkoittaa, että virheenkorjaus tekee koodin virheenkorjauksen, eikä astu .NETin lähdekoodiin, ellet poista tätä tilaa käytöstä. Tämän asetuksen avulla voit keskittyä koodin virheenkorjaukseen.
Konsolin virheenkorjaustulosteen lopussa näet ohjelman kirjoittavan 3 konsoliin ja poistuvat sitten koodilla 0. Yleensä ohjelman poistumiskoodi 0 ilmaisee, että ohjelma suoritettiin ja siitä poistuttiin kaatumatta. Kaatumisen ja oikean arvon palauttamisen välillä on kuitenkin ero. Tässä tapauksessa pyysimme ohjelmaa laskemaan Fibonacci-sekvenssin viidennen arvon:
0 (0), 1 (1), 1 (2), 2 (3), 3 (4), 5 (5), 8 (6), 13 (7), 21 (8)...
Tämän luettelon viides arvo on 5, mutta ohjelmamme palautti arvon 3. Tehdään virheenkorjaus ja korjataan se.
Keskeytyskoitteiden ja vaiheittaisten suoritusten käyttäminen
Lisää keskeytyskohta napsauttamalla vasenta reunusta rivillä, 1
int result = Fibonacci(5);.
Aloita virheenkorjaus uudelleen. Ohjelma alkaa suorittaa. Se keskeytyy rivillä 1 määrittämäsi keskeytyskohdan vuoksi. Virheenkorjaustavan ohjausobjektien avulla voit astua
Fibonacci()funktioon.
Tarkista muuttujien tila
Nyt kestää jonkin aikaa tarkastella eri muuttujien arvoja käyttämällä Variables -paneelia.
- Mikä on
n-parametrin arvo? - Mitkä ovat funktion suorittamisen alussa paikallisten muuttujien arvot
n1,n2jasum?
Seuraavaksi etenemme
forsilmukkaan käyttämällä Step Over virheenkorjausta -ohjausobjektia.
Jatka jatkamista, kunnes saavutat ensimmäisen rivin
forsilmukan sisällä, rivillä, joka lukee:sum = n1 + n2;
Muistiinpano
Olet ehkä huomannut, että for(...) {} rivin läpi siirtyminen edellyttää useita vaiheita komennoissa. Tämä tilanne ilmenee, koska tällä rivillä on useita -lausekkeita. Kun astut, siirryt seuraavaan lausekkeeseen koodissasi. Yleensä lauseketta per rivi on yksi. Jos näin ei ole, seuraavalle riville siirtymiseen tarvitaan useita vaiheita.
Ajattele koodia
Virheenkorjauksen tärkeä osa on lopettaa ja tehdä joitakin tietoon perustuvia arvauksia siitä, mitä koodin osat (sekä funktiot että lohkot), kuten silmukat), yrittävät tehdä. Ei haittaa, jos et ole varma, se on osa virheenkorjausprosessia. Jos osallistut aktiivisesti virheenkorjausprosessiin, löydät virheenkorjauksen paljon nopeammin.
Ennen kuin pureudumme syvemmälle, muistamme, että Fibonacci-sekvenssi on numerosarja, joka alkaa numeroista 0 ja 1, ja jokainen toinen seuraava luku on kahden edellisen summa.
Tämä tarkoittaa, että:
Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(2) = 1 (0 + 1)
Fibonacci(3) = 2 (1 + 1)
Fibonacci(4) = 3 (1 + 2)
Fibonacci(5) = 5 (2 + 3)
Tämän määritelmän ymmärtäminen ja tämän for silmukan tarkastelun avulla voimme päätellä sen:
- Silmukan lukumäärä on 2–
n(etsimämme Fibonacci-jakson numero). - Jos
non pienempi kuin 2, -silmukkaa ei koskaan suoritetaan. Funktion lopussa olevareturn-lauseke palauttaa arvon 0, josnon 0, ja 1, josnon 1 tai 2. Nämä ovat määrityksen mukaan Fibonacci-sarjan nolla-, ensimmäinen- ja toinen arvo. - Kiinnostavin tapaus on se, kun
non suurempi kuin 2. Näissä tapauksissa nykyinen arvo määritetään kahden edellisen arvon summana. Tässä silmukassan1jan2ovat kaksi edellistä arvoa, jasumon nykyisen iteraation arvo. Tämän vuoksi päivitämmesumjan1-arvot aina, kun selvitämme kahden edellisen arvon summan ja määritämme sen arvoksin2.
Ei sitä tarvitse ylikuormittaa. Voimme vähän turvautua virheenkorjaajaamme. Koodi kannattaa kuitenkin miettiä, jotta näemme, tekeekö se odotetun, ja saada enemmän tietoa, kun se ei tee niin.
Etsi keskeytyskohtia sisältävä virhe
Koodin läpikäyminen voi olla hyödyllistä, mutta vaivalloista etenkin silloin, kun käsittelet silmukoita tai muuta koodia, jota kutsutaan toistuvasti. Sen sijaan, että astumme silmukan läpi uudestaan ja uudestaan, voimme määrittää uuden keskeytyskohdan silmukan ensimmäiselle riville.
Kun teemme tämän, on tärkeää olla strateginen sen suhteen, mihin laitamme keskeytyskohdat. Olemme erityisen kiinnostuneita sumarvosta, koska se edustaa Fibonacci-arvon nykyistä enimmäisarvoa. Tämän vuoksi laitamme keskeytyskohdan riville sen jälkeen, kunsum on määritetty.
Lisää toinen keskeytyskohta riville 13.
Muistiinpano
Jos huomaat, että jatkat koodin suorittamista ja astut sitten riville tai parille, voit helposti päivittää keskeytyspisteet tehokkaampiin riveihin.
Nyt kun silmukassa on määritettynä hyvä keskeytyskohta, voit jatkaa Jatka virheenkorjaus -ohjausobjektia, kunnes keskeytyskohta saavuttaa. Kun tarkastelemme paikallisia muuttujia, näemme seuraavat rivit:
n [int]: 5 n1 [int]: 0 n2 [int]: 1 sum [int]: 1 i [int]: 2Nämä linjat vaikuttavat oikeilta. Kun silmukka läpi ensimmäisen kerran, kahden edellisen arvon
sumon 1. Sen sijaan, että siirrymme rivi riviltä toiselle, voimme hyödyntää keskeytyskohtia ja siirtyä seuraavaan kertaan silmukan läpi.Valitse Jatka, jos haluat jatkaa ohjelman työnkulkua, kunnes seuraava keskeytyskohta osuu. Se on seuraavalla silmukan läpiviennillä.
Muistiinpano
Älä ole kovin huolissasi virheen ohittamisesta, kun käytät Jatka. Sinun pitäisi olettaa, että korjaat usein koodin virheenkorjauksen useita kertoja ongelman löytämiseksi. On usein nopeampaa ajaa se läpi muutaman kerran sen sijaan, että olisi liian varovainen, kun astut läpi.
Tällä kertaa näemme seuraavat arvot:
n [int]: 5 n1 [int]: 1 n2 [int]: 1 sum [int]: 2 i [int]: 3Mietitäänpä asiaa. Ovatko nämä arvot edelleen järkeviä? Vaikuttaa siltä, että heillä on. Kolmannelle Fibonacci-numerolle odotamme, että
sumon yhtä suuri kuin 2, ja se on.Selvä, valitaan Jatka niin se silmukkana uudelleen.
n [int]: 5 n1 [int]: 1 n2 [int]: 2 sum [int]: 3 i [int]: 4Asiat näyttävät hyvältä. Sarjan neljännen arvon odotetaan olevan 3.
Tässä vaiheessa saatat alkaa miettiä, oliko koodi oikein koko ajan, ja olet kuvitellut virheen! Pidetään se mukana viimeisen kerran silmukan läpi. Valitse Jatka vielä kerran.
Odota hetki. Ohjelman suorittaminen päättyi ja tulostit myös 3! Tuo ei ole oikein.
Ei hätää. Emme ole epäonnistuneet, olemme oppineet. Tiedämme nyt, että koodi suoritetaan silmukan läpi oikein, kunnes
iyhtä suuri kuin 4, mutta sitten se poistuu käytöstä ennen lopullisen arvon laskemista. Alan saada ideoita siitä, missä vika on. Oletko täällä?Määritetään vielä yksi keskeytyskohta riville 17, joka on seuraava:
return n == 0 ? n1 : n2;Tämän keskeytyskohdan avulla voimme tarkastaa ohjelman tilan ennen funktion poistumista. Olemme jo oppineet rivien 1 ja 13 aiemmista keskeytyskohtista kaiken, joten voimme tyhjentää ne.
Poista edelliset keskeytyskohdat riveillä 1 ja 13. Voit tehdä niin napsauttamalla niitä rivinumeroiden vieressä olevassa reunuksessa tai poistamalla keskeytyskohdan valintaruudut riveille 1 ja 13 Breakpoints alavasemmalla olevassa ruudussa.
Nyt kun ymmärrämme, mitä tapahtuu paljon paremmin, ja olemme asettaneet keskeytyskohdan, joka on suunniteltu sieppaamaan ohjelmamme huonossa käytöksestä, meidän pitäisi pystyä saamaan tämä virhe!
Käynnistä virheenkorjain vielä kerran.
n [int]: 5 n1 [int]: 2 n2 [int]: 3 sum [int]: 3Tuo ei ole oikein. Pyysimme erityisesti Fibonacci(5), ja meillä on Fibonacci(4). Tämä funktio palauttaa
n2, ja jokainen silmukan iteraatio laskeesumarvon ja määrittään2sumyhtä suuriksi.Näiden tietojen ja aiemman virheenkorjaussuorituksen perusteella voimme nähdä, että silmukka loppui, kun
ioli 4, ei 5.Katsotaanpa
forensimmäistä riviä hieman lähemmin.for (int i = 2; i < n; i++)Odotas hetki. Tämä tarkoittaa, että se poistuu heti, kun silmukan yläosa näkee, että
iei ole vähempää kuinn. Tämä tarkoittaa sitä, että silmukkakoodia ei suoriteta tapauksessa, jossaion yhtä suuri kuinn. Halusimme suorittaa vaini <= nsen sijaan:for (int i = 2; i <= n; i++)Joten tämän muutoksen jälkeen päivitetyn ohjelmasi pitäisi näyttää tältä esimerkiltä:
int result = Fibonacci(5); Console.WriteLine(result); static int Fibonacci(int n) { int n1 = 0; int n2 = 1; int sum; for (int i = 2; i <= n; i++) { sum = n1 + n2; n1 = n2; n2 = sum; } return n == 0 ? n1 : n2; }Lopeta virheenkorjausistunto, jos et ole vielä tehnyt niin.
Tee sitten edellinen muutos riville 10 ja jätä keskeytyskohta riville 17.
Käynnistä virheenkorjain uudelleen. Tällä kertaa, kun saavutamme keskeytyskohdan rivillä 17, näemme seuraavat arvot:
n [int]: 5 n1 [int]: 3 n2 [int]: 5 sum [int]: 5Hei siellä! Näyttää siltä, että meillä on se! Hienoa työtä, olet säästänyt päivän Fibonacci, Inc.!
Valitse Jatka vain varmistaaksesi, että ohjelma palauttaa oikean arvon.
5 The program '[105260] DotNetDebugging.dll' has exited with code 0 (0x0).Se palauttaa oikean tuloksen.
Teit sen! Olet korjaanut osan koodista, jota et kirjoittanut käyttämällä .NET-virheenkorjaus -toimintoa Visual Studio Codessa.
Seuraavassa osiossa opit tekemään kirjoittamasi koodin virheenkorjauksesta helpompaa käyttämällä .NET:n sisäisiä kirjaamis- ja jäljitysominaisuuksia.