b'\n_START_ARTICLE_\nDebuggeri\n_START_PARAGRAPH_\nDebuggeri eli virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4 on tietokoneohjelma, jota k\xc3\xa4ytet\xc3\xa4\xc3\xa4n muiden tietokoneohjelmien ohjelmointivirheiden j\xc3\xa4ljitt\xc3\xa4miseen ja korjaamiseen. Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4t ovat ohjelmoijien ty\xc3\xb6kaluja, ja niit\xc3\xa4 k\xc3\xa4ytet\xc3\xa4\xc3\xa4n yleisimmin silloin, kun ohjelman l\xc3\xa4hdekoodi on saatavilla. Virheen etsimist\xc3\xa4 virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4n avulla kutsutaan yleisesti tietokonealan ihmisten keskuudessa virheenkorjaukseksi (\xe2\x80\x9ddebuggaukseksi\xe2\x80\x9d)._NEWLINE_Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4 antaa mahdollisuuden tarkastella tietokoneen ja tietokoneohjelman sis\xc3\xa4ist\xc3\xa4 tilaa ohjelman suorituksen aikana. Erilaiset virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4t antavat tarkasteluun erilaisia mahdollisuuksia riippuen tarkasteltavasta ohjelmasta ja ohjelman ajonaikaisista oikeustasoista. Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4n k\xc3\xa4yt\xc3\xb6n tarkoituksena on useimmiten selvitt\xc3\xa4\xc3\xa4 ohjelmiston virheit\xc3\xa4, mutta sit\xc3\xa4 voidaan k\xc3\xa4ytt\xc3\xa4\xc3\xa4 my\xc3\xb6s ohjelmiston toiminnan yleiseen selvitt\xc3\xa4miseen ja takaisinmallinnukseen (eng. reverse engineering). Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4\xc3\xa4 voidaan k\xc3\xa4ytt\xc3\xa4\xc3\xa4 t\xc3\xa4ll\xc3\xb6in my\xc3\xb6s laittomiin tarkoituksiin, kuten kaupallisten ohjelmistojen kopiointisuojausten murtamiseen._NEWLINE_Usein debuggeria k\xc3\xa4ytett\xc3\xa4ess\xc3\xa4 tutkittava ohjelma k\xc3\xa4\xc3\xa4nnet\xc3\xa4\xc3\xa4n erityisill\xc3\xa4 asetuksilla joilla siihen lis\xc3\xa4t\xc3\xa4\xc3\xa4n tietoa virheiden j\xc3\xa4ljityst\xc3\xa4 varten. N\xc3\xa4in debuggeri tiet\xc3\xa4\xc3\xa4 mink\xc3\xa4 nimisest\xc3\xa4 l\xc3\xa4hdekoodin tiedostosta ja jopa milt\xc3\xa4 rivilt\xc3\xa4 ajettava koodi on per\xc3\xa4isin. Er\xc3\xa4ill\xc3\xa4 alustoilla ohjelma k\xc3\xa4\xc3\xa4nnet\xc3\xa4\xc3\xa4n oletuksena debug-tiedon kanssa ja julkaistavasta versiosta poistetaan (strip) ylim\xc3\xa4\xc3\xa4r\xc3\xa4iset j\xc3\xa4ljitystiedot._NEWLINE_Yksi virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4n perustoiminto on asettaa ohjelmiston ohjelmakoodiin kohta, jossa ohjelman suoritus pys\xc3\xa4ytet\xc3\xa4\xc3\xa4n (ns. break point) ja suoritus siirtyy virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4\xc3\xa4n. Siirtohetkell\xc3\xa4 virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4 tallentaa v\xc3\xa4litt\xc3\xb6m\xc3\xa4sti ajonaikaisen suorituksen, muun muassa rekistereiden ja muistin tilan ja antaa ohjelmoijalle mahdollisuuden tutkia niiden sis\xc3\xa4lt\xc3\xb6\xc3\xa4. Jos ohjelmaan on k\xc3\xa4\xc3\xa4nnett\xc3\xa4ess\xc3\xa4 lis\xc3\xa4tty lis\xc3\xa4tietoa virheenj\xc3\xa4ljityst\xc3\xa4 varten voidaan muuttujia tarkastella niiden nimill\xc3\xa4. Tiedoista on usein hy\xc3\xb6ty\xc3\xa4 ohjelman toiminnan tarkastamisessa ja virheiden selvitt\xc3\xa4misess\xc3\xa4. _NEWLINE_Virheenj\xc3\xa4ljitt\xc3\xa4jill\xc3\xa4 voidaan j\xc3\xa4ljitt\xc3\xa4\xc3\xa4 ohjelman suoritusta ja esimerkiksi paikallistaa kohta, jossa tietokoneohjelma kaatuu. Virheenj\xc3\xa4ljitt\xc3\xa4jiss\xc3\xa4 voidaan ohjelman suoritusta seurata k\xc3\xa4sky k\xc3\xa4skylt\xc3\xa4 debuggerin k\xc3\xa4ytt\xc3\xb6liittym\xc3\xa4st\xc3\xa4 sek\xc3\xa4 lukea muuttujien ja olioiden sis\xc3\xa4lt\xc3\xb6\xc3\xa4. Muistissa olevia tietoja voidaan paitsi lukea, my\xc3\xb6s usein muokata suoraan virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4st\xc3\xa4. Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4t tarjoavat usein tietokoneen ajonaikaiseen muistiin suoran n\xc3\xa4kym\xc3\xa4n. Lis\xc3\xa4ksi useimmat virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4t tarjoavat n\xc3\xa4kym\xc3\xa4n tietokoneen rekistereihin, pinoon, konekoodiin ja tietokoneohjelman l\xc3\xa4hdekoodiin, mik\xc3\xa4li ohjelmisto on k\xc3\xa4\xc3\xa4nnetty siten, ett\xc3\xa4 symbolitieto l\xc3\xa4hdekoodista on saatavilla. Useat debuggerit osaavat lukea ohjelman kaatumisen yhteydess\xc3\xa4 tallennettavia coredump-tiedostoja virheen j\xc3\xa4ljitt\xc3\xa4mist\xc3\xa4 varten._NEWLINE_Kerneli-tilassa toimivilla debuggereilla, kuten SoftICE, voidaan tarkkailla jopa kerneli- ja laiteajuritason suoritusta. _NEWLINE_Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4 soveltuu hyvin useimpien ohjelmistojen loogisten virheiden j\xc3\xa4ljitt\xc3\xa4miseen, koska se tarjoaa ohjelmiston suoritukseen ajonaikaisen n\xc3\xa4kym\xc3\xa4n. Sen avulla ei kuitenkaan voida j\xc3\xa4ljitt\xc3\xa4\xc3\xa4 kaikentyyppisi\xc3\xa4 virheit\xc3\xa4. Ongelmallisia ovat muun muassa virheet, joissa tutkittava ohjelma toimii yhteisty\xc3\xb6ss\xc3\xa4 jonkun toisen samanaikaisesti joko toisessa prosessissa tai toisessa tietokoneessa toimivan j\xc3\xa4rjestelm\xc3\xa4n kanssa. Virheenj\xc3\xa4ljitt\xc3\xa4j\xc3\xa4 ei voi pys\xc3\xa4ytt\xc3\xa4\xc3\xa4 toista j\xc3\xa4rjestelm\xc3\xa4\xc3\xa4 tai s\xc3\xa4iett\xc3\xa4, tai saada toista prosessia toimimaan ajan suhteen t\xc3\xa4ysin samalla tavalla kuin virhetilanteen syntyess\xc3\xa4. Reaaliaikaj\xc3\xa4rjestelm\xc3\xa4t, kuten esimerkiksi auton ABS-j\xc3\xa4rjestelm\xc3\xa4n ohjaus, ovat my\xc3\xb6s j\xc3\xa4rjestelmi\xc3\xa4, joiden toimintaa ei voida luotettavasti testata tavallisilla virheenj\xc3\xa4ljitt\xc3\xa4jill\xc3\xa4.'