Ladění je proces hledání a odstraňování chyb ve stránkách kódu. Tato kapitola ukazuje některé nástroje a techniky používané pro ladění a analýzu webu.
Co se naučíte:
V této kapitole budou představeny následující funkce technologie ASP.NET a nástroje sady WebMatrix (a další nástroje):
ServerInfoObjectInfoDůležitým aspektem odstraňování chyb a problémů v kódu je snaha jim v první řadě předcházet. Toho je možné docílit vložením částí kódů, které mohou způsobit chybu, do bloků try/catch. Další informace najdete v části věnované zpracování chyb v kapitole 2 – úvod do programování webů ASP.NET s použitím syntaxe Razor. Informace o ladění stránek ASP.NET se syntaxí Razor pomocí integrovaného ladicího programu v sadě Visual Studio získáte v článku Programování webových stránek ASP.NET v sadě Visual Studio.
Pomocná třída ServerInfo (Informace o serveru) je diagnostický nástroj poskytující přehled informací o prostředí webového serveru, na kterém je stránka hostována. Zobrazuje také informace o požadavku protokolu HTTP, který byl zaslán při vyžádání stránky prohlížečem. Pomocná třída ServerInfo zobrazuje identitu aktuálního uživatele, typ prohlížeče, který požadavek zaslal, a další informace. Takovéto informace pomáhají při řešení běžných problémů.
</body> přidejte kód @ServerInfo.GetHtml(): <!DOCTYPE html> <html> <head> <title></title> </head> <body> @ServerInfo.GetHtml() </body> </html>
Kód pomocné třídy ServerInfo můžete vložit na libovolné místo ve stránce. Pokud jej ale přidáte na konec stránky, bude výstup kódu oddělen od ostatního obsahu stránky a tím pádem snáze čitelný.
ServerInfo (Informace o serveru) a také pro všechny další diagnostické techniky, které vyžadují přidání kódu do stránky. Není vhodné, aby návštěvníci webu viděli informace, jako jsou název serveru, uživatelská jména, cesty na webu a další podrobné informace, protože informace tohoto typu mohou využít osoby se zlými úmysly.
Pomocná třída ServerInfo (Informace o serveru) na stránce zobrazí čtyři tabulky s informacemi:
úplný popis všech informací o serveru a požadavku sahá nad rámec této kapitoly, ale je zřejmé, že pomocná třída ServerInfo (Informace o serveru) vrací velké množství diagnostických informací. Více informací o hodnotách, které pomocná třída ServerInfo vrací, najdete v článku Rozpoznané proměnné prostředí na webu Microsoft TechNet a Serverové proměnné služby IIS na webu MSDN.
Další možností, jak zjistit, co se v kódu děje, je vložit do stránky výrazy pro výstup. Jak již víte, hodnotu proměnné můžete přímo poslat na výstup tak, že do stránky přidáte výrazy jako například @myVariable nebo @(subTotal * 12). Tyto výrazy pro výstup můžete pro účely ladění vložit na strategická místa kódu. Díky tomu budete po spuštění stránky moci sledovat hodnoty klíčových proměnných nebo výsledky výpočtů. Až budete s laděním hotovi, můžete výrazy odstranit, nebo je označit jako komentáře. Tento postup ukazuje typický způsob ladění stránky s použitím vložených výrazů.
<!DOCTYPE html> <html> <head> <title></title> </head> <body> @{ var weekday = DateTime.Now.DayOfWeek; // Přidání jednoho dne k aktuálnímu dnu v týdnu pro účely testování if(weekday.ToString() != "Saturday") { // Pokud den týdne není sobota, jednoduše přidáme jeden den. weekday = weekday + 1; } else { // Pokud den týdne je sobota, resetujeme den na hodnotu 0, neboli neděli. weekday = 0; } // Převod dne týdne na řetězcovou hodnotu pro použití v příkazu switch var weekdayText = weekday.ToString(); var greeting = ""; switch(weekdayText) { case "Monday": greeting = "Ok, it's a marvelous Monday."; break; case "Tuesday": greeting = "It's a tremendous Tuesday."; break; case "Wednesday": greeting = "Wild Wednesday is here!"; break; case "Thursday": greeting = "All right, it's thrifty Thursday."; break; case "Friday": greeting = "It's finally Friday!"; break; case "Saturday": greeting = "Another slow Saturday is here."; break; case "Sunday": greeting = "The best day of all: serene Sunday."; break; default: break; } } <h2>@greeting</h2> </body> </html>
V tomto příkladu je pomocí příkazu switch kontrolována hodnota proměnné weekday (den v týdnu) a poté je zobrazena různá zpráva podle toho, jaký je právě den v týdnu. V tomto příkladu je v bloku příkazu if v rámci prvního bloku kódu záměrně změněn den v týdnu přidáním jednoho dne k aktuální hodnotě proměnné weekday (den v týdnu). Jedná se o chybu, která byla do kódu vložena pro účely této ukázky.
Stránka zobrazí zprávu pro nesprávný den v týdnu. Bez ohledu na to, jaký je ve skutečnosti den v týdnu, je vždy zobrazena zpráva určená pro následující den. I když v tomto případě víme, proč je zpráva chybná (protože kód úmyslně nastavuje nesprávnou hodnotu dne), v praxi je často obtížné zjistit, na jakém místě v kódu dochází k chybě. Abyste mohli stránku odladit, musíte zjistit, co se děje s hodnotami klíčových objektů a proměnných, jako je například proměnná weekday (den v týdnu).
@weekday na dvě místa označená v kódu komentářem. Tyto výrazy pro výstup zobrazí hodnoty, které proměnná bude na tomto místě mít v průběhu vykonávání kódu.
var weekday = DateTime.Now.DayOfWeek; // Zobrazení původní hodnoty proměnné weekday @weekday // Přidání jednoho dne k aktuálnímu dnu v týdnu pro účely testování if(weekday.ToString() != "Saturday") { // Pokud den týdne není sobota, jednoduše přidáme jeden den. weekday = weekday + 1; } else { // Pokud den týdne je sobota, resetujeme den na hodnotu 0, neboli neděli. weekday = 0; } // Zobrazení aktualizované hodnoty proměnné weekday @weekday // Převod dne týdne na řetězcovou hodnotu pro použití v příkazu switch var weekdayText = weekday.ToString();
Stránka nejdříve zobrazí skutečný den v týdnu, pak aktualizovaný den v týdnu v důsledku přidání jednoho dne a poté výslednou zprávu z příkazu switch. Výstupy těchto dvou výrazů pracujících s proměnnou (@weekday) nejsou oddělené žádnými mezerami, protože jsme do výstupu nepřidali žádné značky <p> jazyka HTML. Tyto výrazy jsou určeny pouze pro testování.
Nyní vidíme, kde se chyba nachází. Když v kódu poprvé zobrazíme proměnnou weekday, ukazuje správný den. Když ji zobrazíme podruhé, za blokem if v kódu, je hodnota o jeden den posunutá, a proto víme, že se něco stalo mezi prvním a druhým výskytem proměnné weekday. Pokud by se jednalo o skutečnou chybu, takovýto přístup by pomohl zúžit místo v kódu, na kterém se problém vyskytuje.
@{ var weekday = DateTime.Now.DayOfWeek; var weekdayText = weekday.ToString(); var greeting = ""; switch(weekdayText) { case "Monday": greeting = "Ok, it's a marvelous Monday."; break; case "Tuesday": greeting = "It's a tremendous Tuesday."; break; case "Wednesday": greeting = "Wild Wednesday is here!"; break; case "Thursday": greeting = "All right, it's thrifty Thursday."; break; case "Friday": greeting = "It's finally Friday!"; break; case "Saturday": greeting = "Another slow Saturday is here."; break; case "Sunday": greeting = "The best day of all: serene Sunday."; break; default: break; } }
Pomocná třída ObjectInfo (Informace o objektu) zobrazí typ a hodnotu všech objektů, které jí předáte. Umožňuje zobrazit hodnoty proměnných a objektů v kódu (k čemuž jsme v předchozím příkladu použili výrazy pro výstup) a navíc umožňuje zobrazit informace o datovém typu objektů.
<!DOCTYPE html> <html> <head> <title></title> </head> <body> @{ var weekday = DateTime.Now.DayOfWeek; @ObjectInfo.Print(weekday) var weekdayText = weekday.ToString(); var greeting = ""; switch(weekdayText) { case "Monday": greeting = "Ok, it's a marvelous Monday."; break; case "Tuesday": greeting = "It's a tremendous Tuesday."; break; case "Wednesday": greeting = "Wild Wednesday is here!"; break; case "Thursday": greeting = "All right, it's thrifty Thursday."; break; case "Friday": greeting = "It's finally Friday!"; break; case "Saturday": greeting = "Another slow Saturday is here."; break; case "Sunday": greeting = "The best day of all: serene Sunday."; break; default: break; } } @ObjectInfo.Print(greeting) <h2>@greeting</h2> </body> </html>
V tomto příkladu pomocná třída ObjectInfo (Informace o objektu) zobrazí dvě položky:
DayOfWeek (den týdne). Typ druhé proměnné je String (řetězec).ObjectInfo (Informace o objektu).Pro složitější objekty pomocná třída ObjectInfo může zobrazit více informací — v zásadě platí, že může zobrazit typy a hodnoty všech vlastností objektu.
Kromě zobrazení informací na stránce, které napomáhají při jejím ladění, můžete také použít nástroje poskytující informace o průběhu vykonávání stránek. V této části si ukážeme, jak používat nejoblíbenější diagnostické nástroje pro webové stránky a jak používat některé nástroje prostředí WebMatrix, které také pomáhají při ladění webů.
Nástroje pro vývojáře v aplikaci Internet Explorer představují sadu webových nástrojů integrovaných v aplikaci Internet Explorer 8. (Do předchozích verzí aplikace Internet Explorer si tyto nástroje může nainstalovat ze stránky Internet Explorer Developer Toolbar (Panel nástrojů pro vývojáře v aplikaci Internet Explorer) na webu služby Stažení softwaru.) Tento nástroj neumožňuje ladit konkrétně kód ASP.NET, ale může být velmi užitečný při ladění kódu HTML, CSS nebo skriptů, včetně kódu značkovacího jazyka a skriptů dynamicky generovaného kódem ASP.NET.
Tento postup poskytuje představu o tom, jak s Nástroji pro vývojáře aplikace Internet Explorer pracovat. Výchozím předpokladem je, že budete pracovat s aplikací Internet Explorer 8.
<html> a poté otevřete element <body>. V okně budou zobrazeny všechny značky obsažené v elementu <body>.<body>:Více informací o Nástrojích pro vývojáře v aplikaci Internet Explorer vám poskytne článek Seznámení s Nástroji pro vývojáře v aplikaci Internet Explorer na webu MSDN.
Firebug je doplněk pro aplikaci Mozilla Firefox, pomocí něhož je možné kontrolovat kód značkovacího jazyka HTML a šablon stylů CSS, ladit klientské skripty nebo prohlížet informace uložené v souborech cookie a další informace o stránce. Doplněk Firebug si můžete nainstalovat z webu Firebug (http://getfirebug.com/). Stejně jako Nástroje pro vývojáře v aplikaci Internet Explorer ani tento nástroj neumožňuje ladit konkrétně kód ASP.NET, ale může být velmi užitečný při zkoumání kódu značkovacího jazyka HTML a dalších elementů ve stránce, včetně těch, které kód ASP.NET generuje dynamicky.
Tento postup ukazuje jen část z toho, k čemu je možné doplněk Firebug po instalaci používat.
<html>.<body> a poté klikněte na kartu Style (Styl) v pravém podokně. Firebug zobrazí informace o stylech na webu společnosti Microsoft.
Firebug nabízí mnoho možností pro úpravy a ověřování kódu HTML a šablon stylů CSS a také pro ladění a vylepšování skriptů. Na kartě Net (Síť) můžete analyzovat síťovou komunikaci mezi serverem a webovou stránkou. Můžete například profilovat stránku a ověřit si, jak dlouho trvá stažení veškerého jejího obsahu do prohlížeče. Více informací o doplňku Firebug najdete na hlavním webu doplňku Firebug a na wikiwebu s dokumentací pro doplněk Firebug.
Programování webových stránek ASP.NET v sadě Visual Studio