V minulΘm dφlu jsem ukßzal jak vyu₧φvat ladφcφ makra. Kolikrßt ale pot°ebujeme sledovat jakΘ p°esn∞ hodnoty jsou v prom∞nn²ch za b∞hu programu a nejen to, ₧e majφ neplatnou hodnotu a jakß hodnota to je zjistit a₧ po ukonΦenφ aplikace, kdy to nem∙₧eme ovlivnit. Pomocφ zabudovanΘho debugeru ve Visual C++ m∙₧eme sledovat hodnoty prom∞nn²ch za b∞hu programu a takΘ m∙₧eme program za b∞hu m∞nit. To znamenß, ₧e kdy₧ p°i lad∞nφ zjistφme, ₧e je n∞jak² blok k≤du Üpatn∞, nemusφme aplikaci ukonΦit, opravit a znovu spustit, ale staΦφ k≤d opravit a pokraΦovat v lad∞nφ.
Hlavnφm zp∙sobem jak se dostat do debugeru jsou breakpointy. Brekpoint je urΦitß podmφnka, kterß vaÜi aplikaci spuÜt∞nou v ladφcφm m≤du (F5) p°epne do debugeru.
Jsou t°i hlavnφ typy brakpoint∙, kterΘ m∙₧ete pou₧φt ve Visual C++.
Jsou to takovΘ, kterΘ zastavφ aplikaci kdy₧:
1) dostane okno urΦitou zprßvu
2) je spln∞na n∞jakß podmφnka
3) se program dostane na urΦit² °ßdek k≤du
VÜechny breakpointy lze definovat, zapφnat a vypφnat v dialogu, kter² vyvolßte pomocφ menu Edit-Breakpoints nebo klßvesovou zkratkou ALT+F9.
Tento typ brakpointu hlφdß zadanou proceduru okna a kdy₧ do nφ p°idje nadefinovanß zprßva p°epne aplikaci do debugeru. Na nßsledujφcφm obrßzku uvidφte p°φklad nadefinovßnφ takovΘho breakpointu.
V hornφm editaΦnφm comboboxu musφte zadat jmΘno procedury okna kterou chcete hlφdat a v dolnφm zprßvu kterou chcete hlφdat. Dole je seznam vÜech nadefinovan²ch breakpoint∙, kterΘ m∙₧ete zapφnat a vypφnat pomocφ zaÜkrtnutφ a odÜkrtnutφ. Pokud chcete nadefinovat nov² breakpoint klikn∞te do tohoto okna mimo nadefinovanΘ breakpointy a potom m∙₧ete definovat nov², jinak upravujete breakpoint, kter² mß prßv∞ focus.
U tohoto breakpointu nadefinujete podmφnku, kterß zp∙sobφ p°epnutφ do debugeru. Pozor! Tento typ brakpoint∙ znateln∞ zpomalφ provßd∞nφ aplikace v ladφcφm m≤du. P°φklad nadefinovßnφ takovΘhoto breakpointu je na nßsledujφcφm obrßzku.
V hornφm editaΦnφm °ßdku zadßte podmφnku, kterß se mß hlφdat ve specißlnφm tvaru. DoporuΦuji rozbalit si rozÜφ°enou definici pomocφ tlaΦφtka se Üipkou vedle tohoto editaΦnφho °ßdku, jak vidφte na obrßzku. V dialogu rozÜφ°enΘ definice (vpravo) majφ jednotlivΘ °ßdky tento v²znam. Do prvnφho °ßdku zadßte podmφnku kterß se mß hlφdat a to ·pln∞ stejn²m zp∙sobem jak²m by jste ji psali do zdrojovΘho k≤du. (Ostatnφ t°i editaΦnφ °ßdky nemusφte vypl≥ovat.) Druh² °ßdek udßvß funkci uvnit° kterΘ se mß tato podmφnka hlφdat. T°etφ soubor se zdrojov²m k≤dem (kdy₧ mßte zdrojov² k≤d ve vφce souborech, co₧ je u MFC tΘm∞° v₧dy) a Φtvrt² v²sledn² exe soubor. Vra¥me se ale k levΘmu dialogu. Ten obsahuje jeÜt∞ jeden editaΦnφ °ßdek, kter² ·dßvß kolik polo₧ek v poli se mß hlφdat.
Tento breakpoint p°epne do debugeru, kdy₧ se dostanete na urΦit² °ßdek zdrojovΘho k≤du. Lze jej nadefinovat takΘ pomocφ dialogu a pomocφ n∞j mu lze zadat jeÜt∞ dalÜφ mo₧nosti, ale jß jej v₧dy definuji p°φmo ve zdrojovΘm k≤du jak uvidφte dßle. Nejd°φve pro ·plnost ukß₧u (na nßsledujφcφm obrßzku) jak vypadß dialog s takov²mto breakpointem a dialog rozÜφ°enΘ definice.
Tento zp∙sob je ale zbyteΦn∞ slo₧it². Mnohem jednoduÜÜφ je prost∞ nastavit textov² kurzor na °ßdek zdrojovΘho k≤du na kterΘm chcete p°epnout do debugeru a stisknout F9 a to jak pro zapnutφ tak pro vypnutφ. U tohoto typu breakpointu jako u jedinΘho vidφte jeho oznaΦenφ i v editoru a to jako Φerven² kruh vlevo od zdrojovΘho k≤du, jak je vid∞t na nßsledujφcφm obrßzku.
Kdy₧ se pomocφ breakpointu nebo ladφcφho makra dostaneme do debugeru, m∙₧eme se dφvat na hodnoty jednotliv²ch prom∞nn²ch, zkoumat co d∞lß kterß funkce, jakou hodnotu funkce vracφ a upravovat zdrojov² k≤d za b∞hu programu.
Na nßsledujφcφm obrßzku je okno debugeru po zastavenφ na breakpointu definovanΘho na danΘm °ßdku zdrojovΘho k≤du.
Älutß Üipka (na znaΦce brekpointu) ukazuje kter² °ßdek se provede v nßsledujφcφm kroku. Pod zdrojov²m k≤dem je combobox ve kterΘm je uvedeno uvnit° kterΘ funkce se nachßzφte a pod nφm je seznam prom∞nn²ch, kterΘ se pou₧φvßjφ v bezprost°ednφm okolφ tohoto °ßdku zdrojovΘho k≤du a jejich hodnoty a nßvratovΘ hodnoty funkcφ volan²ch v p°edchozφm kroku. Pokud se hodnota prom∞nnΘ v p°edchozφm kroku zm∞nila je v tomto v²pisu uvedena Φervenou barvou. Ve vedlejÜφm okn∞ uvidφte hodnoty prom∞nn²ch (v²raz∙) pro kterΘ jste si nastavili, ₧e je chcete sledovat po celou dobu b∞hu debugeru. Toto stßlΘ sledovßnφ m∙₧ete zapnout v dialogu, kter² vyvolßte stiskem SHIFT+F9 nebo ikonou br²lφ na panelu nßstroj∙ debug.
Na obrßzku vidφte stav kdy se mß v dalÜφm kroku volat funkce Fce1 a jejφ nßvratovß hodnota p°i°adit do prom∞nnΘ d. Nynφ mßte b∞h programu ve sv²ch rukou. M∙₧ete p°epsat zdrojov² k≤d ani₧ byste ukonΦily b∞h aplikace a tyto zm∞ny se okam₧it∞ pou₧ijφ, nebo se jen dφvat jak se za b∞hu programu chovajφ jednotlivΘ prom∞nnΘ.
DalÜφ b∞h programu ovlßdßte pomocφ panelu nßstroj∙ debug nebo odpovφdajφcφch polo₧ek menu Φi klßvesov²ch zkratek. Dßle je seznam klßvesov²ch zkratek a popis jak ovlivnφ b∞h debugeru (a tφm i programu), najφt odpovφdajφcφ ikony a polo₧ky menu vßm urΦit∞ nebude d∞lat potφ₧e.
F5 - UkonΦφ debuger a pokraΦuje v provßd∞nφ programu.
SHIFT+F5 - UkonΦφ debuger i provßd∞n² program.
F10 - Provede °ßdek zdrojovΘho k≤du kter² je na °ad∞.
F11 - Pokud se v °ßdku kter² je na°ad∞ volß n∞jakß funkce skoΦφ provßd∞nφ
dovnit° do tΘto funkce mφsto toho aby ji jen provedlo. Pozor! Pokud volßte
na jednom °ßdku vφce funkcφ (nap°. jako na obrßzku) skoΦφ se dovnit°
funkcφ v tom po°adφ v jakΘm se ve skuteΦnosti provßd∞jφ. Nap°φklad
pokud byste cht∞li v p°φkladu na obrßzku skoΦit dovnit° funkce Fce1
pomocφ F11 skoΦil by debuger do funkce Fce2, kterou by jste museli
odkrokovat nebo z nφ vyskoΦit a a₧ potΘ se stiskem F11 dostanete do funkce Fce1.
SHIFT+F11 - VyskoΦφ ven z aktußln∞ provßd∞nΘ funkce. Tj. provede funkci
do konce a zastavφ se op∞t v mφst∞ volßnφ tΘto funkce.
CTRL+F10 - Spustφ provßd∞nφ a zastavφ se na pozici, kde je textov² kurzor.
Pozor! Pokud je textov² kurzor p°ed provßd∞nou pozicφ, nebo se b∞hem provßd∞nφ
program na tento °ßdek nedostane (nap°φklad dφky v∞tvenφ pomocφ if) mß
tato kombinace klßves stejn² efekt jako F5.
A na zßv∞r jeÜt∞ jedna perliΦka. Vφte co v p°ekladu znamenß debuging? Ve volnΘm p°ekladu je to odvÜivovßnφ. (doslova odbroukovßnφ)