Praćenje, ispravljanje i obrada pogrešaka

Similar documents
IZDAVANJE SERTIFIKATA NA WINDOWS 10 PLATFORMI

JEDINSTVENI PORTAL POREZNE UPRAVE. Priručnik za instalaciju Google Chrome dodatka. (Opera preglednik)

Podešavanje za eduroam ios

Eduroam O Eduroam servisu edu roam Uputstvo za podešavanje Eduroam konekcije NAPOMENA: Microsoft Windows XP Change advanced settings

SAS On Demand. Video: Upute za registraciju:

Tutorijal za Štefice za upload slika na forum.

Biznis scenario: sekcije pk * id_sekcije * naziv. projekti pk * id_projekta * naziv ꓳ profesor fk * id_sekcije

1. Instalacija programske podrške

Otpremanje video snimka na YouTube

KONFIGURACIJA MODEMA. ZyXEL Prestige 660RU

SIMPLE PAST TENSE (prosto prošlo vreme) Građenje prostog prošlog vremena zavisi od toga da li je glagol koji ga gradi pravilan ili nepravilan.

Uvod u MS Word. Nova znanja. Novi pojmovi

Upute za korištenje makronaredbi gml2dwg i gml2dgn

GUI Layout Manager-i. Bojan Tomić Branislav Vidojević

Port Community System

Da bi se napravio izvještaj u Accessu potrebno je na izborniku Create odabrati karticu naredbi Reports.

NIS PETROL. Uputstvo za deaktiviranje/aktiviranje stranice Veleprodajnog cenovnika na sajtu NIS Petrol-a

UPUTE ZA INSTALACIJU PROGRAMA FINBOLT 2007 tvrtke BOLTANO d.o.o.

Office 365, upute za korištenje elektroničke pošte

Kako instalirati Apache/PHP/MySQL na lokalnom kompjuteru pod Windowsima

UPUTSTVO. za ruter TP-LINK TD-854W/ TD-W8951NB

CJENIK APLIKACIJE CERAMIC PRO PROIZVODA STAKLO PLASTIKA AUTO LAK KOŽA I TEKSTIL ALU FELGE SVJETLA

Windows Easy Transfer

Mindomo online aplikacija za izradu umnih mapa

MASKE U MICROSOFT ACCESS-u

Ulazne promenljive se nazivaju argumenti ili fiktivni parametri. Potprogram se poziva u okviru programa, kada se pri pozivu navode stvarni parametri.

Pravljenje Screenshota. 1. Korak

KAPACITET USB GB. Laserska gravura. po jednoj strani. Digitalna štampa, pun kolor, po jednoj strani USB GB 8 GB 16 GB.

AMRES eduroam update, CAT alat za kreiranje instalera za korisničke uređaje. Marko Eremija Sastanak administratora, Beograd,

CJENOVNIK KABLOVSKA TV DIGITALNA TV INTERNET USLUGE

Uvod u relacione baze podataka

PROJEKTNI PRORAČUN 1

Babylon - instalacija,aktivacija i rad sa njim

UPUTE ZA RAD S MODULOM "ČLANOVI" U SUSTAVU "VATRONET"

UPITI (Queries) U MICROSOFT ACCESSU XP

PRIRUČNIK ZA POČETNIKE U INFORMATICI

INSTALIRANJE SOFTVERSKOG SISTEMA SURVEY

URF (Portal za sudionike) PRIRUČNIK ZA REGISTRACIJU

Aplikacija za generiranje jedinstvenog identifikatora formule Korisnički priručnik. Srpanj 2018.

DZM Aplikacija za servise

ODRICANJE OD ODGOVORNOSTI Ovaj je Priručnik povjerljivo, neobjavljeno vlasništvo društva Intesa Sanpaolo Card i ovime se ne prenose prava vlasništva.

- Vežba 1 (dodatan materijal) - Kreiranje Web šablona (template) pomoću softvera Adobe Photoshop CS

Prezentacije (PowerPoint 2003)

OTVARANJE BAZE PODATAKA U MICROSOFT ACCESSU XP

Upotreba selektora. June 04

Trening: Obzor financijsko izvještavanje i osnovne ugovorne obveze

LabVIEW-ZADACI. 1. Napisati program u LabVIEW-u koji računa zbir dva broja.

OTVARANJE BAZE PODATAKA I IZRADA TABLICE U MICROSOFT ACCESS-u

Nejednakosti s faktorijelima

Bušilice nove generacije. ImpactDrill

za STB GO4TV in alliance with GSS media

Direktan link ka kursu:

Vježbe 6 Povezivanje prostornih i atributnih podataka

Upute za upotrebu softvera

TRAJANJE AKCIJE ILI PRETHODNOG ISTEKA ZALIHA ZELENI ALAT

Slobodni softver za digitalne arhive: EPrints u Knjižnici Filozofskog fakulteta u Zagrebu

Idejno rješenje: Dubrovnik Vizualni identitet kandidature Dubrovnika za Europsku prijestolnicu kulture 2020.

Vježba 4. Zadatak Ispod naslova napisati sljedeći tekst (bez okvira):

3. Obavljanje ulazno-izlaznih operacija, prekidni rad

KRATKI PRIRUČNIK IZRADA MENTALNIH MAPA U PROGRAMU MS VISIO Bosiljka Jurjević

Microsoft Excel Moć tabličnog računanja

Tehničke upute korisnicima e-kaba servisa poslovni za platne instrumente izdane od

Priručnik. Xperia Z C6603/C6602

STRUČNA PRAKSA B-PRO TEMA 13

MEĐIMURSKO VELEUČILIŠTE U ČAKOVCU RAČUNARSTVO KRISTIAN LEINER

Tablični kalkulator Excel 7.0 Klinča Sela 2005.

BENCHMARKING HOSTELA

USB Key Uputa za instaliranje programske potpore i registraciju korisnika

Priručnik za pomoć u radu s programom Hot Potatoes na hrvatskom jeziku

Jomla 1.0 Vodič za početnike Autor: Russell Walker ( Prijevod na Hrvatski: Željko Mršić

SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA. SEMINARSKI RAD U OKVIRU PREDMETA "Računalna forenzika" 2016/2017. GIF FORMAT (.

KORISNIČKE UPUTE Servis e-regos

Upute za VDSL modem Innbox F60 FTTH

pokret računalnog opismenjavanja izgradnja e - učenje modernog društva ITdesk.info projekt računalne e-edukacije sa slobodnim pristupom

ITdesk.info. Napredna obrada teksta LibreOffice Writer. Priručnik. Autorica: Mariza Maini. pokret računalnog opismenjavanja.

Napredna obrada teksta Korištenje proširenog skupa znakova Pisanje teksta u stupcima

Ollydbg. Petar Afrić,

UPUTE ZA KORIŠTENJE HOME.TV TO GO USLUGE

U prošlom broju -a upoznali ste Hot Potatoes program za izradu kvizova. Jedan broj -a bio

sys.monitor Published on sys.portal (

Kamera. Mrežna kamera Dome. Kratke upute za upotrebu hrvatski

Primjer 3 Prikaz i interpretacija rezultata

KRATKI PRIRUČNIK IZRADA MENTALNIH MAPA U PROGRAMU MS VISIO Bosiljka Jurjević

ZAVOD ZA AUTOMATIKU I PROCESNO RAČUNARSTVO FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA SVEUČILIŠTE U ZAGREBU HTTP PROTOKOL OTVORENO RAČUNARSTVO

2. Kreiranje nove baze podataka

Korak X1 X2 X3 F O U R T W START {0,1}

Upoznajte svoj telefon

INFORMATIKA zadaci za vježbe

Najnoviju verziju uputa skinite na: Stranica. barxprint upute (verzija 26/04/2012)

Implementacija sparsnih matrica upotrebom listi u programskom jeziku C

P R O J E K T N I R A D

PRIRUČNIK ZA ENERGETSKOG ADMINISTRATORA

Priprema podataka. NIKOLA MILIKIĆ URL:

IBM Cognos Query Studio Verzija Vodič za korisnike

Poglavlje 1 POČETAK RADA SA MICROSOFT OFFICE-OM 2016

Osmišljavanje računalnog oblaka

KORISNIČKE UPUTE Servis e-regos

MINISTRY OF THE SEA, TRANSPORT AND INFRASTRUCTURE

3D GRAFIKA I ANIMACIJA

OBLIKOVANJE WEB STRANICA Praktikum (laboratorijske vježbe) Haidi Božiković

Transcription:

POGLAVLJE 7 Praćenje, ispravljanje i obrada pogrešaka Svaki se programer susreo s pogreškama u programima one su sastavni dio posla. Mnoge pogreške otkrivaju se tijekom razvoja. Neke se javljaju samo u slučajevima kad krajnji korisnik u programu izvede neku nepredviđenu operaciju ili unese podatke nedozvoljenog formata. Poželjno je pogreške u programu pronaći u što ranijoj fazi razvojnog procesa, a jako je važno izbjeći da pogreške u programu umjesto nas pronalaze krajnji korisnici. Nebrojene su studije pokazale da je pogreške lakše i jeftinije ispraviti ako se otkriju ranije. U slučaju da se u vašem programu pojave problemi, željet ćete ih riješiti brzo i neprimjetno ili, u najgorem slučaju, biti poraženi sa stilom. ASP.NET donosi alate i značajke koji će vam pomoći da s uspjehom ispravite pogreške u programima. Praćenje Izvođenje programa moguće je pratiti na razini stranice ili na razini aplikacije. ASP.NET donosi mogućnost stvaranja opsežnog dnevnika praćenja s informacijama o životnom ciklusu programa. Simboličko uklanjanje pogrešaka Moguće je kretati se kroz program, postavljati točke prekida, pregledavati i modificirati varijable i izraze, te ulaziti u klase i izlaziti iz njih, čak i ako su pisane u drugim programskim jezicima. Obrada pogrešaka Moguće je obrađivati standardne ili prilagođene pogreške, na razini aplikacije ili stranice. Također, moguće je prikazivati različite stranice s opisom pogrešaka za različite pogreške. Prije proučavanja ASP.NET alata za uklanjanje pogrešaka u programu, trebali biste napraviti jednostavnu Web stranicu, kojoj ćete dodati kod za praćenje. Zatim ćete u program unijeti pogreške i upotrijebiti program za uklanjanje pogrešaka za njihovo pronalaženje i ispravljanje. 294

Stvaranje probne aplikacije Za početak, napravite novu Web stranicu u VS2005 i nazovite je DebuggingApp. Stranica će se sastojati od jedne stranice i sadržavati zaglavlje, padajući popis DropDownList s mogućnošću prikazivanja odabrane kategorije i hipervezu. Dovucite kontrolu label na vrh stranice i postavite njeno svojstvo Text na: Tracing, Debugging & Error Handling Demo Promijenite svojstvo Font.Name u Arial Black, svojstvo Font.Size u Large i svojstvo Font.Bold na true. Postavite kontrolu DropDownList na obrazac i nazovite je ddlbooks. Njeno AutoPostBack svojstvo postavite na true. Padajućem popisu DropDownList je potrebno dodati i kod za obradu pogrešaka. U pogledu Design, mišem pritisnite gumb sa sličicom munje, pri vrhu prozora Properties i dvaput pritisnite polje pored SelectedIndexChanged. Otvorit će se datoteka pozadinskog koda Default.aspx.cs i kursor će biti postavljen u metodu za obradu događaja ddlbooks_selectedindexchanged. Unesite podebljani kod iz primjera 7-1. Primjer 7-1. Metoda za obradu događaja SelectedIndexChanged protected void ddlbooks_selectedindexchanged(object sender, System.EventArgs e) { // Provjeravam je li nešto odabrano. if (ddlbooks.selectedindex!= -1) { lblddl.text=ddlbooks.selecteditem.text + " ---> ISBN: " + ddlbooks.selecteditem.value; } } Ispod popisa DropDownList dodajte labelu lblddl. Vrijednost svojstva Text ostavite prazno. U metodu Page_Load datoteke pozadinskog koda dodajte kod iz primjera 7-2. Primjer 7-2. Metoda za obradu događaja Page_Load private void Page_Load(object sender, System.EventArgs e) { // Ovdje stavite korisnički kod za inicijaliziranje stranice if (! IsPostBack) { // Stvaram dvodimenzionalno polje za popis // Prva dimenzija sadrži ime knjige // Druga dimenzija sadrži ISBN broj Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 295

Primjer 7-2. Metoda za obradu događaja Page_Load (nastavak) } } string[,] books = { {"Programming C#","0596006993"}, {"Programming.NET Windows Applications","0596003218"}, {"Programming ASP.NET","0596004877"}, {"WebClasses From Scratch","0789721260"}, {"Teach Yourself C++ in 21 Days","067232072X"}, {"Teach Yourself C++ in 10 Minutes","067231603X"}, {"XML & Java From Scratch","0789724766"}, {"Complete Idiot's Guide to a Career in Computer Programming","0789719959"}, {"XML Web Documents From Scratch","0789723166"}, {"Clouds To Code","1861000952"}, {"C++ Unleashed","0672312395"} }; // Sada popunjavam popis. int i; for (i = 0; i < books.getlength(0); i++) { // Dodajte Text i Value ddlbooks.items.add(new ListItem(books[i,0],books[i,1])); } Naposlijetku ispod kontrole lblddl dodajte kontrolu HyperLink i nazovite je hpltest. Svojstvo Text promijenite u Link To, a svojstvo NavigateUrl promijenite u TestLink. aspx. Ne postoji stanica s tim nazivom to je pogreška koju ćemo namjerno napraviti, kako bismo kasnije u ovom poglavlju pokazali postupak obrade pogrešaka. Pokrenite Web strancu i odaberite neku od stavki iz padajućeg popisa. Trebali biste vidjeti nešto slično slici 7-1. Slika 7-1. Pokusna stranica za praćenje, ispravljanje i obradu pogrešaka u programu 296 Programiranje ASP.NET

Ovu ćete aplikaciju koristiti kroz ostatak poglavlja za demonstraciju različitih tehnika analize i uklanjanja pogrešaka u ASP.NET kodu, te za obradu pogrešaka u svojoj aplikaciji. Praćenje Praćenje predstavlja jednostavan način saznavanja što se doista zbiva u programu. U vrijeme klasičnog ASP programiranja, jedini način da saznamo što se zbiva u programu bilo je umetanje Response.Write iskaza na strateška mjesta u programu. Na taj način bismo vidjeli da li je program stigao do određene točke u kodu i možda bismo prikazali vrijednosti nekih varijabli. Veliki problem kod te tehnike ručnog praćenja, osim što je puno posla, je da ste prije puštanja programa u produkciju morali iz njega ukloniti ili zakomentirati sve te iskaze. ASP.NET donosi bolje načine za prikupljanje informacija dobivenih praćenjem izvođenja programa. Moguće je praćenje na razini aplikacije ili na razini stranice. Kod praćenja na razini aplikacije, pretražuju se sve stranice, dok kod praćenja na razini stranice sami birate stranice na kojima ćete dodati praćenje. Praćenje na razini stranice Za dodavanje mehanizma za praćenje na razini stranice modificirajte direktivu Page na vrhu.aspx stranice dodavanjem atributa Trace i postavljanjem njegove vrijednosti na true, na sljedeći način: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Trace="true" %> Kad pogledate ovu stranicu, vidjet ćete da se na dnu nalaze tablice koje sadrže mnogo informacija o Web aplikaciji. Odaberite knjigu iz padajućeg popisa i vidjet ćete nešto kao na slici 7-2. Prvi dio tablice, Request Details, prikazuje osnovne informacije, uključujući identifikator sesije, vrijeme i tip zahtjeva i statusni kod (Tablica 7-1). Svaki put kad se stranica šalje na poslužitelj, ovaj podatak se ažurira. Promijenite li odabir (sjetimo se da je atribut AutoPostBack postavljen na true), vidjet ćete da se vrijednost vremena zahtjeva mijenja, ali vrijednost identifikatora sesije ostaje nepromijenjena. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 297

Slika 7-2. Rezultati praćenja 298 Programiranje ASP.NET

Tablica 7-1. Statusni kodovi Kategorija Broj Opis Informacijska (100-199) 100 101 Uspjeh (200-299) 200 204 Preusmjeravanje (300-399) 301 305 307 Pogreške klijenta (400-499) 400 402 404 408 417 Pogreške poslužitelja (500-599) 500 503 505 Nastavak Protokoli prespajanja OK Bez sadržaja Trajno premješteno Korištenje posredničkog poslužitelja Privremeno preusmjereno Neispravan zahtjev Zahtjev za plaćanjem Nije pronađeno Isteklo vrijeme zahtjeva Neodgovarajući rezultat Interna pogreška poslužitelja Usluga nedostupna HTTP inačica nije podržana Sljedeći odjeljak, Trace Information, je dnevnik praćenja koji sadrži informacije o životnom ciklusu programa, uključujući vrijeme (u sekundama) proteklo od inicijalizacije stranice (stupac From First(s)) te od prethodnog događaja u životnom ciklusu (stupac From Last(s)). U dnevnik praćenja pogrešaka možete dodavati i prilagođene informacije o traženju pogrešaka, na način koji je opisan u nastavku ovog poglavlja. Sljedeći odjeljak, Control Tree, donosi popis kontrola na stranici u hijerarhijskom rasporedu koji uključuje naziv kontrole, njezin tip i veličinu u bajtovima na stranici i u ViewState torbi stanja. Nakon tog odjeljka slijedi sažetak Session and Application State te popis kolekcija kolačića i zaglavlja. Naposlijetku, tu je popis svih poslužiteljskih varijabli. Dodavanje podataka u dnevnik praćenja pogrešaka Pisanjem u objekt Trace moguće je izlazu praćenja dodati prilagođene podatke. Ovaj objekt, učahuren u klasi TraceContext, za umetanje vaših iskaza u dnevnik praćenja pogrešaka koristi dvije metode: Write i Warn. Jedina razlika između tih dviju metoda je u tome što metoda Warn u dnevnik upisuje podatke crvenom bojom. Metode Warn i Write su preopterećene kako bi mogle prihvatiti jedan argument, dva argumenta ili dva niza znakova i objekt iznimke, kao što je prikazano u sljedećim slučajevima: Trace.Warn("Warning Message") U dnevnik praćenja umeće zapis s porukom proslijeđenom u obliku niza znakova. Trace.Warn("Category","Warning Message") U dnevnik praćenja umeće zapis s kategorijom i porukom koju prosljeđujete. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 299

Trace.Warn("Category","Warning Message", excp) U dnevnik praćenja umeće zapis s kategorijom, porukom upozorenja i iznimkom. Kako bismo sve to vidjeli na djelu, u datoteku pozadinskog koda Web stranice DebuggingApp dodajte podebljani kod iz primjera 7-3. Primjer 7-3. Zapisivanje u objekt Trace protected void Page_Load(object sender, System.EventArgs e) { // Ovdje stavite korisnički kod za inicijaliziranje stranice Trace.Write("In Page_Load"); if (! IsPostBack) { Trace.Write("Page_Load", "Not Postback."); // Stvaram dvodimenzionalno polje za popis // Prva dimenzija sadrži ime knjige // Druga dimenzija sadrži ISBN broj string[,] books = { {"Programming C#","0596001177"}, {"Programming ASP.NET","1234567890"}, {"WebClasses From Scratch","0789721260"}, {"Teach Yourself C++ in 21 Days","067232072X"}, {"Teach Yourself C++ in 10 Minutes","067231603X"}, {"XML & Java From Scratch","0789724766"}, {"Complete Idiot's Guide to a Career in Computer Programming","0789719959"}, {"XML Web Documents From Scratch","0789723166"}, {"Clouds To Code","1861000952"}, {"C++: An Introduction to Programming","1575760614"}, {"C++ Unleashed","0672312395"} }; } } // Sada popunjavam popis. int i; for (i = 0; i < books.getlength(0); i++) { // Dodajem Text i Value ddlbooks.items.add(new ListItem(books[i,0],books[i,1])); } protected void ddlbooks_selectedindexchanged(object sender, System.EventArgs e) { // Prisiljavam kod da izazove iznimku try { int a = 0; int b = 5/a; } catch (System.Exception ex) { 300 Programiranje ASP.NET

Primjer 7-3. Zapisivanje u objekt Trace (nastavak) } Trace.Warn("UserAction","Calling b=5/a",ex); } // Provjeravam je li nešto odabrano. if (ddlbooks.selectedindex!= -1) { lblddl.text=ddlbooks.selecteditem.text + " ---> ISBN: " + ddlbooks.selecteditem.value; } Prva poruka je dodana u metodi Page_Load i služi da potvrdi kako ste ušli u tu metodu: Trace.Write("In Page_Load"); Sljedeća poruka dodaje se ako se stranica ne šalje natrag poslužitelju: if (! IsPostBack) { Trace.Write("Page_Load", "Not Postback."); Ova se poruka kategorizira kao Page_Load. Korištenje kategorije može vam pomoći u organizaciji izlaza praćenja. Učinak ovih dvaju Write iskaza prikazan je na slici 7-3. Slika 7-3. Dva izlaza metode Trace.Write Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 301

Treća poruka dodana je da ilustrira proces umetanja iznimke u dnevnik pogrešaka. Metoda za obradu ddlbooks_selectedindexchanged sada sadrži kod koji će izazvati iznimku zbog dijeljenja s nulom. Kod će uhvatiti tu iznimku i upisati ju u dnevnik s iskazom Trace, kao što je prikazano u odlomku koda koji slijedi: try { int a = 0; int b = 5/a; } catch (System.Exception ex) { Trace.Warn("UserAction","Calling b=5/a",ex); } Obrada iznimaka Kao i mnogi drugi objektno orjentirani jezici, C# predvidljive ali neuobičajene uvjete (prekid mrežne veze, nedostajuće datoteke i sl.) obrađuje s pomoću iznimaka. Kad program naiđe na iznimnu okolnost, izbacuje iznimku a izvođenje trenutne metode se zaustavlja i stog ostaje otvoren do pronalaska odgovarajuće metode za obradu iznimke. To znači da, ako metoda koja se trenutno izvodi ne obrađuje iznimke, ona će se prekinuti i iznimka će se pokušati riješiti pozivanjem druge metode. Ako nijedno pozivanje metode ne uspije riješiti iznimku, ona će biti proslijeđena CLR-u koji će prekinuti izvođenje programa. Blokove try/catch možete koristiti za isprobavanje potencijalno opasnog programskog koda i hvatanje objekata iznimki koje je izbacio operativni sustav ili neki dio koda koji ste napisali. Blok za hvatanje je metoda za obradu iznimki, koja se sastoji od bloka programskog koda koji će se izvesti u slučaju iznimke. U idealnom slučaju iznimka bude uhvaćena i obrađena, te program može sam riješiti problem i nastaviti s izvođenjem. Čak i ako nastavak izvođenja programa ne uspije, hvatanjem iznimke dobivate priliku za upisivanje pogreške, prikaz smislene poruke i uglađeno prekidanje programa. Ako u metodi postoji kod koji se mora izvesti bez obzira na eventualno pojavljivanje iznimaka (na primjer, oslobađanje dodijeljenih resursa ili zatvaranje otvorene datoteke), takav kod možete smjestiti u blok finally, u kojem će njegovo izvođenje biti zajamčeno, čak i u slučaju pojave iznimaka. Za detaljniju raspravu o obradi iznimaka pogledajte knjigu Jessea Libertyja, Programiranje C#, četvrto izdanje koja je također dio paketa IT Expert. Rezultat ovog Trace iskaza prikazan je na slici 7-4. Budući da je ovaj Trace iskaz napisan tako da poziva metodu Warn, a ne metodu Write, njegov ispis na zaslonu se prikazuje u crvenoj boji (ne i u knjizi, doduše). Primijetite 302 Programiranje ASP.NET

Slika 7-4. Rezultat metode Trace.Warn da se prikazuje niz koji ste proslijedili, Calling b=5/a, nakon čega slijedi poruka o pogrešci automatski generirana iz objekta iznimke. Implementacija Trace iskaza je jednostavna, a kad dođe vrijeme za puštanje stranice u upotrebu, svi oni mogu ostati u kodu. Jedina modifikacija koju je potrebno učiniti je promijeniti atribut Trace u direktivi Page u false. Praćenje na razini aplikacije Praćenje na razini aplikacije odnosi se na sve stranice u zadanoj Web aplikaciji. Konfigurira se datotekom Web.config, koja će biti detaljnije opisana u poglavlju 18. Datoteka Web.config se obično nalazi u korijenskoj mapi Web stranice. Postoji li takva datoteka u podmapi korijenske mape aplikacije, tada će ona biti primijenjena na stranice iz te podmape i njenih podmapa. Ako je praćenje omogućeno u cijeloj aplikaciji iz korijenske mape, praćenje će se izvoditi u cijeloj aplikaciji na jednak način. Iznimka su one stranice čija je direktiva page suprotna direktivi aplikacije. Web.config je XML datoteka koja se sastoji od odjeljaka odvojenih oznakama. Informacije o konfiguraciji praćenja nalaze se u odjeljku <trace>, unutar odjeljka <system. Web>, koji se nalazi u odjeljku <configuration>. Datoteka Web.config, kao i svi ostali XML dokumenti, mora biti pravilno oblikovana. Dobro oblikovana XML datoteka opisana je u poglavlju 3. Dobro je napomeniti kako XML razlikuje velika i mala slova. Tipičan kod za konfiguraciju praćenja izgledat će kao u primjeru 7-4. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 303

Primjer 7-4. Odlomak koda u datoteci Web.config za praćenje <?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.netconfiguration/v2.0" >... <system.web> <trace enabled="true" requestlimit="10" pageoutput="false" tracemode="sortbytime" localonly="true" /> Datoteku Web.config moguće je mijenjati korištenjem alata ASP.NET Configuration Tool dostupnog odabirom opcije izbornika Website ASP.NET Configuration ili pritiskanjem gumba na vrhu Solution Explorera u Visual Studiju 2005. Možete ju mijenjati i ručno, tako što ćete ju dvaput pritisnuti u Solution Exploreru. (Ako Solution Explorer nije vidljiv, odaberite opciju Solution Explorer u izborniku View) ili otvoriti u bilo kojem programu za uređivanje teksta. U odjeljku <trace> moguće je zadati sedam različitih svojstava, prikazanih u tablici 7-2. Neka od tih svojstava odnose se na preglednik praćenja, koji ćemo opisati u narednom odjeljku. Tablica 7-2. Svojstva iz odjeljka Trace Svojstvo Vrijednosti Opis Enabled True, false Uključuje ili isključuje praćenje na razini aplikacije. Podrazumijevana vrijednost je false. Ako je praćenje omogućeno, na svim će stranicama aplikacije biti vidljive informacije o praćenju, osim ako određena stranica u direktivi Page ne sadrži vrijednost Trace = false localonly True, false Pokazuje je li preglednik trace dostupan samo na Web poslužitelju. Podrazumijevana vrijednost je true. mostrecent True, false Ako je true, odbacit će starije zahtjeve kad vrijednost svojstva RequestLimit prijeđe postavljenu granicu. Ako je vrijednost false (koja je podrazumijevana), praćenje će biti onemogućeno kad bude dostignuta granica RequestLimit. pageoutput True, false Određuje hoće li podaci o praćenju biti dostupni na stranicama aplikacije i u pregledniku trace. Podrazumijevana vrijednost je false. Stranice na kojima je omogućeno praćenje nisu obuhvaćene ovom postavkom. requestlimit Integer Broj trace zahtjeva za praćenje koji će biti pohranjen na poslužitelju i vidljiv u pregledniku praćenja. Podrazumijevana vrijednost je 10. 304 Programiranje ASP.NET

Tablica 7-2. Svojstva iz odjeljka Trace (nastavak) Svojstvo Vrijednosti Opis tracemode SortByTime SortByCategory Određuje hoće li dnevnik praćenja biti sortiran prema vremenu ili kategoriji. Podrazumijevana vrijednost je TraceMode.SortByTime writetodiagnosticstrace True, false Ako je vrijednost true, poruke iz dnevnika praćenja se prosljeđuju u klasu Trace. Podrazumijevana vrijednost je false. Preglednik praćenja Kada je omogućeno praćenje na razini aplikacije, moguće je dnevniku praćenja za bilo koju aplikaciju pristupiti iz preglednika. Funkcionalnost praćenja u programu sadrži preglednik rezultata praćenja (engl. trace viewer) trace.axd. Otvorite ga u pregledniku kao da se radi o stranici aplikacije, upisujući sljedeću URL adesu: http://localhost/debuggingapp/trace.axd Vidjet ćete sažetak svih zapisa u dnevniku praćenja, kao što je prikazano na slici 7-5. Slika 7-5. Preglednik praćenja Pritiskanje bilo koje hiperveze u odjeljku View Details odvest će vas na istu stranicu koju biste vidjeli kod praćenja na razini stranice za tu stranicu. Uklanjanje pogrešaka Praćenje rezultira prikazom svih koraka koje je programski kod poduzeo nakon pokretanja. No, ponekad postoji potreba za promatranjem koda za vrijeme izvođenja drugim riječima, ponekad nam je umjesto autopsije potrebna računalna tomografija. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 305

Ekvivalent računalne tomografije, kada je riječ o programskom kodu je simbolički alat za uklanjanje pogrešaka. Kod pokretanja koda u alatu za uklanjanje pogrešaka, moći ćete promatrati njegovo izvođenje, korak po korak. Krećući se kroz kod, moći ćete vidjeti kako varijable mijenjaju vrijednosti te kako objekti nastaju i prestaju postojati. U ovom ćemo odjeljku ukratko predstaviti najvažnije dijelove alata za uklanjanje pogrešaka koji je sastavni dio VS2005 integriranog razvojnog okruženja. Za potpuni prikaz korištenja tog alata, upućujemo vas na prikladnu literaturu. Alat za uklanjanje pogrešaka je jedan od najmoćnijih alata za svladavanje ASP.NET-a. Aplikacija može biti konfigurirana tako da omogućava ili ne omogućava uklanjanje pogrešaka. Konfiguracijske informacije o uklanjanju pogrešaka nalaze se datoteci web.config, u odjeljku <compilation>, koji je dio odjeljka <system.web> koji se nalazi u odjeljku <configuration>. Odlomak tipičnog konfiguracijskog koda izgledat će kao u primjeru 7-5. Primjer 7-5. Dio konfiguracijskog koda za uklanjanje pogrešaka <?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://schemas.microsoft.com/.netconfiguration/v2.0" >... <system.web> <compilation debug="true" /> Ako debug postavite na false performanse aplikacije će se popraviti. Alatna vrpca Debug Alatna vrpca Debug dostupna je u integriranom razvojnom okruženju. Da biste ju vidjeli, odaberite View Toolbars i zatim opciju Debug. Tablica 7-3. Ikone na alatnoj vrpci Debug Ikona Ekvivalent u izborniku Debug Prečac na tipkovnici Opis Držač alatne vrpce. Pritisnite i povucite alatnu vrpcu na novu lokaciju. Start/Continue F5 Započinje ili nastavlja izvođenje programa. Break All Ctrl-Alt-Break Zaustavlja izvođenje programa u trenutnom redu koda. Stop Debugging Shift-F5 Zaustavlja uklanjanje pogrešaka. 306 Programiranje ASP.NET

Tablica 7-3. Ikone na alatnoj vrpci Debug (nastavak) Ikona Ekvivalent u izborniku Debug Prečac na tipkovnici Restart Ctrl-Shift-F5 Zaustavlja izvođenje programa u kojem se ispravljaju pogreške i odmah pokreće novo izvođenje. Prikazuje sljedeći iskaz. Opis Točke prekida Step Into F11 Ako trenutni red sadrži poziv metode ili funkcije, ova će opcija program za uklanjanje pogrešaka uvesti u tu metodu ili funkciju. Step Over F10 Ako trenutni red sadrži poziv metode ili funkcije, ova opcija neće ulaziti u tu metodu ili funkciju, nego će nakon poziva otići na sljedeći red. Step Out Shift-F11 Ako je trenutni red u metodi ili funkciji, ta će se metoda ili funkcija izvesti do kraja i alat za ispravljanje pograšaka će stati s izvođenjem u redu koji slijedi poziv metode ili funkcije. Prekidač za prikaz u heksadecimalnom formatu. Windows Odabir prozora za uklanjanje pogrešaka. Opcije alatne vrpce. Nudi opcije za dodavanje ili uklanjanje gumba sa svih alatnih vrpci (Debug, Text Editor itd.) The crux of the biscuit is the apostrophe. Frank Zappa, Apostrophe( ) Točke prekida (engl. break points) su srž uklanjanja pogrešaka. Točka prekida je instrukcija.net-u da izvodi kod do određenog reda u kodu i zatim stane i pričeka da provjerite trenutno stanje aplikacije. Za vrijeme stanke u izvođenju, moguće je: Pregledavati i mijenjati vrijednosti varijabli i izraza. Kretati se kroz programski kod. Ulaziti i izlaziti iz metoda i funkcija, čak i ulaziti u klase napisane u drugim jezicima kompatibilnim s CLR-om. Izvoditi ostale poslove analiziranja i uklanjanja pogrešaka. Postavljanje točke prekida Točke prekida možete postavljati u bilo kojem prozoru za uređivanje koda na nekom od jezika koji su kompatibilni sa.net kosturom, poput C# ili VB2005, pritiskanjem Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 307

sive okomite vrpce na lijevoj margini prozora. Na lijevoj margini će se pojaviti crvena točka i odgovarajući red koda će biti označen, kao na slici 7-6. Slika 7-6. Postavljanje točaka prekida Prozor Breakpoint Sve trenutno postavljene točke prekida možete vidjeti u prozoru Breakpoint. Da biste otvorili taj prozor, potrebno je izvesti neku od sljedećih akcija: Pritisnite Ctrl-Alt-B. Odaberite opciju Breakpoints s izbornika Debug Windows. Pritisnite ikonu Windows na alatnoj vrpci Debug i zatim odaberite Breakpoints. Prozor Breakpoints prikazan je na slici 7-7. Slika 7-7. Prozor Breakpoints Točku prekida moguće je uključiti ili isključiti potvrđivanjem polja u prozoru Breakpoints ili uklanjanjem oznake za potvrdu. 308 Programiranje ASP.NET

Svojstva točke prekida Ponekad će biti potrebno da točka prekida ne zaustavi izvođenje programa svaki put kad se dosegne. VS2005 nudi nekoliko svojstava s pomoću kojih se može mijenjati ponašanje točke prekida. Ta svojstva je moguće postaviti s pomoću izbornika svojstava, kojeg ćete prikazati tako što ćete: Desnom tipkom miša pritisnuti točku prekida na lijevoj margini prozora. Otvoriti prozor Breakpoints i desnom tipkom miša pritisnuti željenu točku prekida. Korisničko sučelje za rad s točkama prekida je u VS2005 prošireno i donekle se razlikuje u odnosu na prethodne inačice. U bilo kojem od ova dva slučaja, prikazat će se dijaloški okvir sa slike 7-8. Slika 7-8. Izbornik svojstava točke prekida Prve dvije stavke izbornika svojstava omogućavaju brisanje ili isključivanje odabrane točke prekida. Stavka Disable će se mijenjati svaki put kad ju pritisnemo. Kad je točka prekida isključena, ikona će izgledati kao prazan krug. Na izborniku se nalaze sljedeće opcije: Location. Opcija Location prikazuje dijaloški okvir sa slike 7-9, koji dovoljno govori sam za sebe i nije ge potrebno objašnjavati. Slika 7-9. Dijaloški okvir Breakpoint Location Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 309

Condition. Ova opcija prikazuje dijaloški okvir sa slike 7-10. Slika 7-10. Dijaloški okvir Breakpoint Condition U polje Condition možete upisati bilo koji ispravan iskaz i on će biti provjeren kad izvođenje programa dostigne točku prekida. Ovisno o tome koji radio-gumb je odabran i koja se vrijednost dobije provjerom zadanog iskaza, izvođenje programa će se privremeno zaustaviti ili će se nastaviti. U dijaloškom okviru su dva gumba: Is true Ako zadani uvijet vrati true, program će se privremeno zaustaviti. Has changed Ako se zadani uvijet promijenio, program će se privremeno zaustaviti. Kod prvog prolaska kroz kod u kojem se traže pogreške točka prekida nikad neće zaustaviti program, zato jer ne postoje vrijednosti za usporedbu. Pri drugom i sljedećim prolascima iskaz će biti inicijaliziran i bit će provođene usporedbe. Hit count. Ova opcija prikazuje broj izvođenja tog dijela koda od početka izvođenja ili od trenutka kad je bio pritisnut gumb Reset Hit Count. Gumb Hit Count prikazuje dijaloški okvir sa slike 7-11. Slika 7-11. Dijaloški okvir Breakpoint Hit Count Otvaranje padajućeg popisa nudi sljedeće opcije: Break always Break always when the hit count is equal to Break always when the hit count is a multiple of Break always when the hit count is greater than or equal to 310 Programiranje ASP.NET

Odaberete li bilo koju opciju osim Break always (koja je podrazumijevana), dijaloški okvir će prikazati polje u koje možete unijeti broj izvođenja. Pretpostavimo da je ovo točka prekida postavljena u nekakvu petlju. Odabrat ćemo Break when the hit count is a multiple of i u polje unijeti 5. Program će se zaustaviti kod svakog petog izvođenja. Kad je zadan broj izvođenja, u sredini crvene točke prekida na lijevoj margini prozora nalazit će se znak plus. Filter. Postavljanje filtra točke prekida omogućit će zadavanje strojeva, procesa, dretvi ili bilo koje njihove kombinacije za koju će točka prekida vrijediti. Odabir opcije Filter s izbornika prikazat će dijaloški okvir sa slike 7-12. Slika 7-12. Dijaloški okvir Breakpoint Filter When Hit... Opcija When Hit prikazuje dijaloški okvir sa slike 7-13. Polje za potvrdu Print a message je podrazumijevano nepotvrđeno. Kad ga potvrdimo, okrugla crvena ikona točke prekida na lijevoj margini prozora mijenja oblik u dijamant. Slika 7-13. Dijaloški okvir Breakpoint When Hit Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 311

Također, moguće je odabrati izvođenje nekog od velikog broja makroa, poput Find- Case, SaveView i SaveBackup. Polje za potvrdu Continue execution je podrazumijevano potvrđeno. Ikone točaka prekida Svaki simbol točke prekida označava drugu vrstu točke prekida. Simboli točaka prekida prikazani su u tablici 7-4. Tablica 7-4. Ikone točaka prekida Ikona Tip Opis Uključena Normalna aktivna točka prekida. Ako su zadovoljeni uvjeti točke prekida ili broja izvođenja programa, izvođenje će se zaustaviti u ovom redu. Isključena Izvođenje se neće zaustavljati u ovom redu, sve dok točka prekida ne bude ponovno uključena. Pogreška Upozorenje Lokacija ili uvjet nije važeći. Kod u ovom redu još nije učitan, tako da točka prekida ne može biti postavljena. U slučaju kasnijeg učitavanja koda, točka prekida će biti uključena. Kretanje kroz programski kod Jedna od najmoćnijih tehnika uklanjanja pogrešaka iz aplikacije je kretanje kroz programski kod, koje pruža uvid u tijek izvođenja i pregledavanje vrijednosti varijabli, svojstava, objekata itd. Kako bismo ovu tehniku vidjeli u akciji, otvorit ćemo datoteku pozadinskog koda naše pokusne aplikacije. Točku prekida ćemo smjestiti u poziv metode Add kolekcije Items kontrole DropDownList, u red metode Page_Load u kojem se na padajući popis dodaju nove stavke. Broj izvođenja postavite na višekratnik broja 5 (izvođenje će se prekidati svaki put kad broj pogodaka bude višekratnik broja 5). Zatim pokrenite program. Kad se dostigne točka prekida, izvođenje programa će se zaustaviti u redu koji sadrži točku prekida i ona će postati žuta. Na simbolu točke prekida na lijevoj margini pojavit će se žuta strelica. Prozor Visual Studija 2005 će izgledati kao na slici 7-14. Sada se možete kretati kroz kod, izraz po izraz ili red po red, ulazeći u metodu ili funkciju, korištenjem neke od sljedećih tehnika: Odabirom opcije Step Into s izbornika Debug. Pritiskanjem ikone Step Into (u tablici 7-3 nalazi se slika te ikone). Pritiskom na tipku F11. 312 Programiranje ASP.NET

Slika 7-14. Dosegnuta točka prekida Kroz kod se moguće kretati i bez ulaženja u pozvane metode ili funkcije, odnosno, moguće je preskakati pozive korištenjem sljedećih tehnika: Odabirom opcije Step Over s izbornika Debug. Pritiskanjem ikone Step Over (u tablici 7-3 nalazi se njena slika). Pritiskom na tipku F10. Napokon, ako ispravljate pogreške u pozvanoj metodi ili funkciji iz te metode ili funkcije možete izaći koristeći neku od ovih tehnika: Odabirom opcije Step Out s izbornika Debug. Pritiskanjem ikone Step Out (u tablici 7-3 prikazana je njena slika). Pritiskom na kombinaciju tipki Shift-F10. Ispitivanje varijabli i objekata Kad je program zaustavljen, vrlo je lako ispitati vrijednost objekata i varijabli u dosegu. Postavite pokazivač miša iznad željene varijable ili objekta, pričekajte trenutak i pojavit će se mali prozor u kojem će biti prikazana trenutna vrijednost te varijable ili objekta. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 313

Držite li pokazivač miša iznad varijable, u prozoru će bit prikazan tip varijable, njena vrijednost (ako je relevantna) i eventualna druga svojstva te varijable. Držite li pokazivač miša iznad nekog drugog objekta, u prozoru će biti prikazane informacije važne za tip tog objekta, uključujući cijeli imenski prostor, sintaksu i kratak opis. Prozori za uklanjanje pogrešaka Prozori za uklanjanje pogrešaka optimizirani su na način da informacije o programu prikazuju na specifičan način. U sljedećim odjeljcima će biti opisan svaki od tih prozora. Prozorima možete pristupiti na tri načina: pritiskanjem prečaca na tipkovnici, odabirom opcije pod Debug Windows ili pritiskanjem ikone Windows na alatnoj vrpci Debug. Tablica 7-5 donosi opis svih prozora, zajedno s prečacima na tipkovnici za njihovo otvaranje. Tablica 7-5. Prozori za uklanjanje pogrešaka Naziv prozora Tipke prečaca Opis Immediate Ctrl-Alt-I Prikaz bilo koje varijable ili izraza. Autos Ctrl-Alt-V i zatim A Prikaz svih varijabli u trenutnom ili prethodnom iskazu. Locals Ctrl-Alt-V i zatim L Prikaz svih varijabli u trenutnom kontekstu. Watch Ctrl-Alt-W i zatim 1, 2, 3 ili 4 Prikaz do četiri različita skupa varijabli po vašem odabiru. Call Stack Ctrl-Alt-C Prikaz svih metoda u stogu poziva. Threads Ctrl-Alt-H Prikaz i kontrola dretvi. Modules Ctrl-Alt-U Prikaz svih modula koji su trenutno u upotrebi. Disassembly Ctrl-Alt-D Prikaz trenutnog programa u kodu sklopa. Registers Ctrl-Alt-G Prikaz registara mikroprocesora. Memory Ctrl-Alt-M i zatim n, gdje je n = 1, 2, 3 ili 4 Prikaz sadržaja na najviše četiri različite memorijske adrese. Prozor Immediate Prozor Immediate će vam omogućiti unos gotovo bilo koje varijable, svojstva ili izraza i trenutan prikaz njihovih vrijednosti. U prozor Immediate moguće je unijeti izraze s ciljem njihovog trenutnog izvođenja. Želite li vidjeti vrijednost nekog izraza, prije njega postavite upitnik. Na primjer, nalazi li se točka prekida u redu prikazanom na slici 7-14, vrijednost cjelobrojne vrijednosti i vidjet ćete unošenjem nekog od sljedećih redova (ovi redovi imaju isto značenje):?i i 314 Programiranje ASP.NET

u prozor Immediate i pritiskom na Enter. Slika 7-15 prikazuje rezultat ove vježbe, a osim toga, prikazuje i proces dodjeljivanja nove vrijednosti varijabli i zatim ponovni prikaz njene vrijednosti. Promijenite li vrijednost varijable u prozoru Immediate, ta će nova vrijednost stupiti na snagu u nastavku izvođenja programa. Slika 7-15. Prozor Immediate Sadržaj prozora Immediate možete obrisati tako što ćete desnom tipkom miša pritisnuti bilo gdje u prozoru i odabrati opciju Clear All s kontekstnog izbornika. Prozor ćete zatvoriti pritiskanjem gumba X u gornjem desnom kutu prozora. Zatvorite li prozor i zatim ga ponovno otvorite tijekom iste sesije, sadržavat će iste one vrijednost koje je imao kad ste ga zatvorili. Prozor Autos Prozor Autos prikazuje sve varijable korištene u trenutnom i prethodnom iskazu, prikazane u hijerarhijskoj tablici. Tipični prozor Autos prikazan je na slici 7-16. Slika 7-16. Prozor Autos U tablici se nalaze odgovarajući stupci za naziv objekta, njegovu vrijednost i tip. Znak plus kraj nekog objekta označava da taj objekt ima objekte potomke koji nisu prikazani, dok znak minus označava da su objekti potomci danog objekta vidljivi. Pritiskanjem znaka plus otvorit će se prikaz njegovih objekata potomaka, dok pritisak na znak minusa zatvara takav prikaz. Vrijednosti koje se mijenjaju u trenutnom koraku prikazane su crvenom bojom. Moguće je odabrati bilo koju varijablu i promijeniti joj vrijednost. Ta će vrijednost u prozoru Autos onda biti crvene boje. Sve promjene vrijednosti stupaju na snagu trenutno. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 315

Prozor Locals Prozor Locals se razlikuje od prozora Autos po tome što prikazuje samo varijable značajne za trenutni kontekst lokalne varijable. Trenutni kontekst je metoda ili funkcija koja sadrži trenutnu lokaciju izvođenja programa. Prozor Watch Prozor Watch je jednak prozoru Autos, osim što prikazuje samo one varijable, svojstva ili izraze koje ste unijeli u polje Name ili ste ih dovukli iz drugih prozora. Prednost upotrebe ovog prozora je što omogućava istovremeni prikaz objekata iz više različitih izvora. Time je omogućeno dodavanje tipova objekata različitih od zadanog tipa u bilo kojem prozoru za uklanjanje pogrešaka. Osim što možete upisivati nazive objekata koje želite promatrati, u ovaj prozor možete i dovlačiti varijable, svojstva ili izraze iz prozora s kodom. U kodu odaberite objekt kojeg želite prenijeti u prozor Watch i zatim ga odvucite u polje Name. U prozor Watch moguće je dovlačiti objekte iz ovih prozora: Locals Autos This Disassembly Kako biste iz ovih prozora mogli povlačiti u prozor Watch, i izvorišni prozor i prozor Watch moraju biti otvoreni. U izvorišnom prozoru označite red i dovucite ga na karticu prozora Watch. Prozor Watch će tada doći u prvi plan na zaslonu, nakon čega ćete željeni objekt moći dovući do praznog reda u njemu. Prozor Call Stack Prozor Call Stack prikazuje nazive metoda na pozivnom stogu, te tipove i vrijednosti njihovih parametara. Moguće je kontrolirati koje će informacije biti prikazane u prozoru Call Stack tako da desnom tipkom miša pritisnete bilo gdje u prozoru i uključujete ili isključujete prikaz polja u donjem dijelu pomoćnog izbornika. Prozor Threads Prozor Threads omogućit će vam ispitivanje i kontrolu dretvi u programu u kojem ispravljate pogreške. Dretve (engl. threads) su sekvence instrukcija koje će se izvoditi. Programi mogu biti jednodretveni ili višedretveni. Tema dretvi i višeprocesnog programiranja izlazi iz okvira ove knjige. 316 Programiranje ASP.NET

Prozor Modules Prozor Modules omogućava ispitivanje.exe i.dll datoteka koje koristi program u kojem ispravljate pogreške. Prozor Modules prikazan je na slici 7-17. Slika 7-17. Prozor Modules Po podrazumijevanim postavkama, moduli su prikazani redom kojim su učitani. Moguće ih je sortirati i po nekom drugom redoslijedu tako što ćete pritisnuti zaglavlje stupca po kojem želite sortirati. Prozor Disassembly Prozor Disassembly prikazuje trenutni program u asemblerskom kodu. Ako ispravljate pogreške u upravljanom kodu, poput onog koji je napisan na jezicima VB2005, C# ili Managed C++, taj će kod odgovarati Microsoft Intermediate Language (MSIL) kodu. Prozor Disassembly prikazan je na slici 7-18. Slika 7-18. Prozor Disassembly Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 317

Za razliku od ostalih prozora koje smo predstavili u ovom poglavlju, prozor Disassembly prikazuje se kao prozor s jezičkom u okviru glavne radne površine. Točke prekida je moguće postavljati bilo gdje u prozoru, kao i u bilo kojem drugom prozoru s izvornim kodom. Prozor Registers Prozor Registers omogućava ispitivanje sadržaja registara mikroprocesora. Vrijednosti koje su se nedavno mijenjale prikazane su crvenom bojom. Možete odabrati koje će informacije biti prikazane tako što ćete desnom tipkom miša pritisnuti bilo gdje u prozoru Registers i zatim pritisnuti informaciju koju želite prikazati. Prozori Memory Postoje četiri prozora Memory za ispis sadržaja memorije velikih bafera, nizova znakova i drugih podataka koji se ne bi dobro prikazali u nekoj drugoj vrsti prozora. Četiri Memory prozora služe prikazu četiriju različitih memorijskih adresa. Obrada pogrešaka Možete, i trebali biste, izbjegavati pogreške u programu, ali postoje pogreške kod izvođenja programa koje je nemoguće izbjeći, pa ih treba što suptilnije obraditi. Svaki programer želi izbjeći da se krajnji korisnik sretne sa zagonetnim porukama o pogreškama ili još gore, s blokiranjem aplikacije. Pogreške se javljaju iz različitih razloga: zbog akcija korisnika, poput unosa krivo formatiranog teksta u polje, zbog logičkih pogrešaka u programu ili zbog okolnosti na koje programer ne može utjecati, poput nedostupne datoteke ili isključenog mrežnog kabela. Pogreške koje je najlakše pronaći i ispraviti su pogreške u sintaksi, odnosno prekršaji u pravilima programskog jezika. Na primjer, pretpostavimo da u C# kod koji pišete unesete sljedeći red: intt i; Kod prevođenja programa prevoditelj će dojaviti pogrešku u prevođenju, jer je ključna riječ za deklariranje cjelobrojne vrijednosti krivo napisana. Korištenjem VS2005 broj pogrešaka u sintaksi se dramatično smanjuje. Ovisno o načinu na koji je VS2005 konfiguriran, svaki element koda koji nije prepoznat biva potcrtan. Ako je uključena opcija Auto List Members (Tools Options Text Editor All Languages), pogrešaka bi trebalo biti još manje. Dogodi li se da neke sintaksne pogreške ipak ostanu u kodu, ili koristite neki drugi program za uređivanje, prevoditelj će uhvatiti pogreške u sintaksi. Takve pogreške jako rijetko dospiju u finalnu inačicu koda. 318 Programiranje ASP.NET

Kad prevoditelj pronađe pogrešku u sintaksi, u prozoru Output se prikazuje poruka koja sadrži lokaciju pogreške i njen sažet opis. Ako su uzrok pogreške nezatvoreni navodnici ili zagrade ili nedostajući točka zarez u jeziku C#, tada se može dogoditi da se pogreška zapravo ne nalazi u redu koji je naveden u poruci o pogrešci. Greške koje su problematičnije, a često ih je i teže pronaći, su pogreške u logici aplikacije. Može se dogoditi da program bude preveden bez problema i da se u većini slučajeva izvodi savršeno glatko, a ipak sadrži pogreške u logici. Greške koje je najteže pronaći su one koje se najrjeđe pojavljuju. Ne možete li reproducirati problem, bit će ga vrlo teško pronaći. Osim što želite eliminirati sve pogreške iz koda, željet ćete i da, u slučaju da se neka suptilna pogreška ili neočekivani problem ipak pojavi, program reagira sa stilom. Neobrađene pogreške Kako bismo prikazali što se događa u slučaju neobrađenih pogrešaka, promijenit ćemo pokusni projekt kako bi se u njemu pojavile pogreške. Uđite u datoteku pozadinskog koda. Pronađite petlju for koja popunjava listu DropDownList u metodi Page_Load. Promijenite testni izraz kako biste kod pokretanja izazvali namjernu pogrešku. Na primjer, red koda: for (i = 0; i < books.getlength(0); i++) promijenite u: for (i = 0; i < books.getlength(0) + 2; i++) Kod pokretanja, ovaj će kod pokušati dodati više stavki nego što je zadano u polju books, što će izazvati pogrešku u izvedbi. Nije to baš suptilna pogreška, ali pomoći će nam da prikažemo kako sustav reagira na pogreške u izvedbi. Pokrenimo sada program. Kao što smo očekivali, odmah dolazi do pogreške i prikazuje se generička ASP.NET stranica s opisom pogreške, kao na slici 7-19. Ova stranica s opisom pogreške je zapravo vrlo korisna programeru ili osoblju koje radi u tehničkoj podršci i koje će pokušati pronaći i ispraviti pogrešku. Sadrži podatke o tipu pogreške, približan broj reda koda u kojem je došlo do pogreške i trag stoga koji može pomoći u traženju tog reda koda. Ovu detaljnu stranicu moguće je zamijeniti prilagođenom stranicom i na taj način nadzirati pristup informacijama o pogreškama. To možete učiniti postavljanjem atributa elementa CustomErrors u konfiguracijskoj datoteci na način opisan u nastavku. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 319

Slika 7-19. Generička stranica s opisom pogreške Stranice s opisom pogreške za cijelu aplikaciju U prethodnom smo odjeljku prikazali podrazumijevane stranice s opisom pogrešaka koje se pojavljuju u slučajevima neobrađenih pogrešaka. Programeru će one pomoći, ali u inačici aplikacije koja će se isporučivati korisnicima, estetski je prikladnije prikazati stranice o pogreškama s manje tehničkih detalja. Cilj je presretanje pogreške prije nego što dobije priliku poslati generičku stranicu s opisom pogreške klijentu. To je na razini aplikacije moguće postići modificiranjem konfiguracijske datoteke Web.config, koja je detaljnije opisana u poglavlju 18. Informacije o konfiguraciji upravljanja pogreškama unutar Web.config datoteke nalaze se u odjeljku <customerrors> unutar odjeljka <system.web> koji se pak nalazi u odjeljku <configuration>. Uobičajena <customerrors> stranica izgleda kao u primjeru 7-6. Primjer 7-6. Odlomak prilagođenog koda za konfiguriranje prijavljivanja pogrešaka u datoteci Web.config <?xml version="1.0" encoding="utf-8"?> <configuration>... <system.web> <customerrors defaultredirect="customerrorpage.htm" mode="on" /> 320 Programiranje ASP.NET

Za odjeljak <customerrors> moguće je zadati dva atributa: defaultredirect i mode. defaultredirect je niz znakova koji sadrži URL adresu stranice koja će se prikazati u slučaju pogreške koja se ne obrađuje na neki drugi način. U primjeru 7-6, stranica defaultredirect je CustomErrorPage.htm. Ovaj primjer sastoji se od jednostavne HTML stranice koja se nalazi u istoj korijenskoj virtualnoj mapi aplikacije. Sadržaj te stranice prikazan je u primjeru 7-7. Primjer 7-7. CustomErrorPage.htm <html> <body> <h1>sorry - you've got an error.</h1> </body> </html> Ako se stranica s opisom pogreške koju je potrebno prikazati ne nalazi u virtualnoj mapi aplikacije, u atributu defaultredirect ćete morati navesti relativni ili kvalificirani URL te stranice. mode je atribut koji aktivira ili deaktivira prilagođene stranice s opisom pogreške na razini aplikacije. Može imati tri različite vrijednosti: On Aktivira prilagođene stranice s opisom pogreške u cijeloj aplikaciji. Off Deaktivira prilagođene stranice s opisom pogreške u cijeloj aplikaciji. RemoteOnly Aktivira prilagođene stranice s opisom pogrešaka sam za udaljene klijente. Lokalni klijenti će vidjeti generičke stranice. Na ovaj način se programerima pruža uvid u sve moguće informacije o pogrešci, dok će krajnji korisnici vidjeti skraćeni opis. Ako Web.config datoteku izmijenite tako da izgleda kao u primjeru 7-6, u virtualnu korijensku mapu aplikacije dodajte datoteku CustomErrorPage.htm i pokrenite program. Umjesto stranice prikazane na slici 7-19, vidjet ćete nešto slično onome na slici 7-20. Slika 7-20. Prilagođena stranica pogreške Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 321

Očito je da ćete u prilagođenu stranicu s opisom pogreške htjeti uključiti više informacija, poput instrukcija ili informacija o osobama koje možete kontaktirati u vezi s pogreškom. Moguće je i prikazivanje dinamičkih informacija o pogreškama. Moguće je čak i za različite pogreške napraviti različite prilagođene stranice s opisom. Kako biste to postigli, morat ćete u odjeljak <customerrors> datoteke Web.config dodati jednu ili više podoznaka <error>, kao što je prikazano u primjeru 7-8. Primjer 7-8. Dio Web.config datoteke s umetnutim <error> podoznakama <?xml version="1.0" encoding="utf-8"?> <configuration>... <system.web> <customerrors defaultredirect="customerrorpage.htm" mode="on" > <error statuscode="400" redirect="customerrorpage400.htm"/> <error statuscode="404" redirect="customerrorpage404.htm"/> <error statuscode="500" redirect="customerrorpage500.htm"/> </customerrors> Kopirajte CustomErrorPage.htm tri puta i kopijama dajte imena navedena u <error> podoznakama u primjeru 7-8. Promijenite datoteke tako da svaka od njih sadrži jedinstvenu poruku. Sada ponovno pokrenite program koji i dalje ima pogrešku u for petlji. Trebali biste vidjeti nešto kao na slici 7-21. Slika 7-21. Prilagođena stranica s opisom pogreške Error 500 Ispravite pogrešku u for petlji tako da se program barem učita na pravilan način. Tada ponovno pokrenite program i pritisnite hipervezu koju ste postavili na testnoj stranici. Ta je kontrola konfigurirana na način da vodi do nepostojeće.aspx datoteke. Trebali biste vidjeti nešto kao na slici 7-22. 322 Programiranje ASP.NET

Slika 7-22. Prilagođena stranica s opisom pogreške Error 404 Treba napomenuti kako je prilagođene stranice s opisom pogreške moguće prikazivati samo za pogreške koje se dogode na vašem poslužitelju. Ako hiperveza vodi do nepostojeće strance, npr. http://testpage.comx (primjetite namjerno pogrešno postavljenu ekstenziju), neće biti prikazana prilagođena stranica za pogrešku 404. Umjesto toga, vidjet ćete stranicu s opisom pogreške za koju je udaljeni poslužitelj ili vaš preglednik podešen. Također, pogrešku 404 moći ćete uhvatiti samo ako stranica na koju postavljate hipervezu ima ekstenziju.aspx. Osim prikazivanja prilagođene stranice s opisom pogreške, metodi za obradu događaja Application_OnError u datoteci global.asax možete dodati kod, tako da se izvodi kod svakog pojavljivanja pogreške. Događaji aplikacije i sesije, kao i datoteka global. asax, su detaljnije predstavljeni u poglavlju 18. Stranice sa opisima pogrešaka specifične za stranicu Modificiranjem direktive Page moguće je premostiti stranice s opisom pogrešaka na razini aplikacije, (Poglavlje 6 detaljno govori o direktivi Page). Modificirajte direktivu Page u datoteci Default.aspx aplikacije DebuggingApp, tako da izgleda kao u sljedećem odlomku koda (primijetite dodani i podebljani ErrorPage atribut): <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="DebuggingApp.WebForm1" Trace="false" ErrorPage="PageSpecificErrorPage.aspx" %> Ako se na ovoj stranici pojavi pogreška, bit će prikazana stranica PageSpecificError- Page.aspx. Ako je u Web.config datoteci definirana stranica pogreške na razini aplikacije, ona će biti premošćena postavkom direktive Page. Poglavlje 7: Praćenje, ispravljanje i obrada pogrešaka 323