Kuinka käyttää Pharo Debuggeriä

Smalltalkissa Debugger on diagnostiikkatyökalu ohjelmistovirheiden tai virheiden tutkimiseen. Toisin kuin muiden kielten virheenkorjaimet, Smalltalk Debuggeriä voidaan käyttää myös ohjelmoimaan, ts. Kirjoittamaan hakemuksesi! Tämä voi olla erittäin kätevä ja tehokas lähestymistapa ohjelmointiin.

Kuvailkaamme tätä esimerkillä. Meillä on todella yksinkertainen luokka nimeltä #Counter:

Objektin alaluokka: #Counter
   instanceVariableNames: 'count'
   classVariableNames: ''
   paketti: 'Tutorial'
Counter >> alustaa
   laskettu: = 0
Counter >> addOne
   laskea: = laskea - 1
Counter >> count
   ^ laskea
Laskuri >> määrä: c
   laskettu: = c

Debuggeria voidaan kutsua useilla tavoilla:

  1. Ohjelmasi kohtaa kohtalokkaan virheen, kuten “ei ymmärtänyt viestiä niin ja niin”
  2. Korosta lauseke Playgroundissa ja napsauta hiiren kakkospainikkeella valitaksesi Debug it (tai paina Ctrl-Shift-D)
  3. Jos lisäät "Pysäytä nyt" -käsky koodiin, virheenkorjaja avautuu, kun käsky suoritetaan

Suoritetaan seuraava leikkikenttä:

Uusi vasta-aineisto

Jos tarkastat sen (korostamalla ja napsauttamalla hiiren kakkospainikkeella valitaksesi Tarkasta se), huomaat, että 'laskun' arvo on -1, ei sitä mitä odotimme.

Voimme tehdä virheen (tutkia) tästä kirjoittamalla virheenkorjauksen (napsauta hiiren kakkospainikkeella valitaksesi virheenkorjauksen).

Huomaa, että ruutua on kolme. Pino-osiossa näet ohjelman täydellisen suorittamisen “pino”. (Pino on tietorakenne, jota käytetään seuraamaan, mitä toimintoja tai menetelmiä tällä hetkellä suoritetaan ohjelmassa. Sitä kutsutaan pinoksi, koska kun yksi menetelmä kutsuu toista, joka kutsuu toista, joka kutsuu toista, keräät pinon suorittamistapahtumia, mikä on hyvin hyödyllinen suorituskäyttäytymisen jäljittämiseen.)

Lähderuudussa voit nähdä ja muokata tietyn toiminnon tai menetelmän lähdekoodia pinossa. Muuttujat-ruutu näyttää kaikki muuttujat (mukaan lukien paikalliset muuttujat, esiintymämuuttujat ja näennäismuuttujat), jotka ovat menetelmän käytettävissä. Debuggerissa esitetyt tiedot ovat kaikki mitä tarvitset ymmärtääksesi mitä tapahtuu. Kun analysoit näitä tietoja, pystyt päättämään virheen lähteen.

Arvioija on leikkikenttämainen ikkuna muuttujien sisältämien lausekkeiden arvioimiseksi. Tämä voi auttaa sinua ymmärtämään mitä tapahtuu.

Debugger tarjoaa useita mahdollisia toimia tutkiaksesi ohjelman käyttäytymistä. Pino-osion yläosassa on useita vaihtoehtoja:

  • Jatka - jatka normaalia suoritusta ikään kuin mitään keskeytettäisiin
  • Käynnistä uudelleen - olet jo mennyt liian pitkälle, joten aloita uudelleen nykyisen menetelmän alusta
  • Käynnistä korostettu viesti / menetelmä ja astu siihen tutkimaan tarkemmin
  • Suorita korostettu viesti / menetelmä yli ja siirry sen päälle, ei siihen
  • Kautta - suorita menetelmän kautta argumenttilohkoon

Joten näemme virheenkorjaimessa, että #new-menetelmä on korostettu. Se on menetelmä, joka on tarkoitus toteuttaa. Emme ole kiinnostuneita siitä; Haluamme tutkia menetelmää #addOne. Napsauta 'Yli' siirtyäksesi kohtaan #addOne.

Nyt haluamme siirtyä sisään #addOne, joten napsauta Into. Näemme koodin Lähde-ruudussa. Nopea katsaus tekee selväksi, mikä on vialla (yleensä sinun on analysoitava koodi paljon huolellisemmin ja perusteellisemmin): meillä on lisäoperaattorin sijaan vähennysoperaattori. Joten voimme muuttaa koodin heti siellä ja siellä, ja tallentaa:

addOne
   laskea: = laskea + 1

Nyt voimme jatkaa suorittamista (napsauttamalla hiiren kakkospainikkeella valitaksesi 'Jatka') ikään kuin mikään ei olisi vialla! Se on elävän koodauksen voima Smalltalkissa.

Korjasimme #addOne. Annetaan nyt menetelmä #subtractOn yksi laukaus. Leikkikentällä teemme seuraavat:

Laske uusi vähennyslasku

Ylös aukeaa ilmoitusikkuna, joka ilmoittaa, että Pharo ”ei ymmärrä #subtractOne”! Tämä johtuu siitä, että menetelmää #subtractOne ei ole vielä olemassa.

Ilmoitusikkuna tarjoaa useita mahdollisia toimintoja:

  • Jatka - jatka normaalia suoritusta
  • Hylkää - hylkää teloituksen
  • Debug - avaa debugger
  • Luo - luo olematon menetelmä
  • Raportti - tämä on vanhentunut toiminto, poistettu Pharo 7.0: sta

Meillä on mahdollisuus luoda puuttuva menetelmä heti napsauttamalla Luo. Sen jälkeen kysytään, mihin luokkaan ja protokollaan uusi menetelmä otetaan. Lisää seuraava koodi:

Counter >> subtractOne
   laskea: = laskea - 1

Tallenna tämä ja jatka suorittamista.

Paitsi että voit luoda menetelmiä, voit myös luoda luokkia Debuggeriin. Jos koodit menetelmässäsi olemattoman luokan ja yrität tallentaa, virheenkorjaaja antaa sinulle mahdollisuuden ”Luo ​​uusi luokka” ponnahdusikkunassa.

Kuten näet, voit kirjoittaa koodin Debuggerilla aivan yhtä helposti kuin järjestelmäselaimessa. Tällä tavoin voit kirjoittaa toistuvasti koodia ja debugida, kirjoittaa koodin ja debug, samalla kun näet tarkalleen mitä ohjelmassasi tapahtuu. Se on erittäin tehokas ja kokonaisvaltainen tapa kehittää ohjelmistoja. Kannustan sinua hallitsemaan tämä lähestymistapa.