V mnoha uΦebnicφch programovßnφ narazφte na odkazy na debuger a lad∞nφ. Bohu₧el mßlokde najdete alespo≥ zb∞₧nΘ vysv∞tlenφ jak se lad∞nφ provßdφ. Proto jsem se rozhodl napsat aspo≥ to co o lad∞nφ vφm jß. V tomto Φlßnku se budeme zab²vat makry urΦen²mi pro lad∞nφ.
Poznßmka: Pokud nepou₧φvßte aplikaci s podporou MFC musφte sami vlo₧it hlaviΦkov² soubor afx.h
Pokud sestavφte aplikaci jako debug tak se tyto dv∞ makra chovajφ stejn∞. Rozdφl je a₧, kdy₧ aplikaci sestavφte jako release.
Poznßmka: Program musφte spustit pomocφ F5 (ladit) namφsto CTRL+F5 (spustit).
Makro ASSERT mß jeden parametr a to hodnotu typu BOOL. Pokud je parametr TRUE, nestane se nic, ale pokud je FALSE p°eruÜφ se provßd∞nφ programu a zobrazφ se podobnΘ dialogovΘ okno jako je na nßsledujφcφm obrßzku, ve kterΘm se vypφÜe ve kterΘm souboru a na kterΘm °ßdku doÜlo k vyvolßnφ ladφcφho p°eruÜenφ.
Kdy₧ stisknete tlaΦφtko Opakovat p°epne se vßÜ program do debugeru na °ßdek s ASSERT, jak vidφte na nßsledujφcφm obrßzku.
Debuger m∙₧ete ukonΦit pomocφ panelu nßstroj∙ nebo menu (Debug).
Poznßmka: Tentokrßt musφte aplikaci spustit pomocφ CTRL+F5 (spustit) a ne pomocφ F5 (lad∞nφ), proto₧e v aplikaci ji₧ nejsou zahrnuty informace pro lad∞nφ. Program sice po odkliknutφ upozorn∞nφ lze spustit v ladφcφm m≤du (F5), ale nemß to ₧ßdn² smysl (pokud neznßte opravdu dob°e asembler).
Makro ASSERT se ·pln∞ vypustφ a z makra VERIFY z∙stane jeho parametr. NejlepÜφ je ukßzat si jejich chovßnφ na p°φkladu.
P°edpoklßdejme, ₧e mßme nadefinovanou funkci s takov²mto prototypem:
BOOL Funkce();
Potom nßm z
ASSERT(Funkce());
po p°ekladu nez∙stane nic a z
VERIFY(Funkce());
z∙stane
Funkce();
Poznßmka: Makro TRACE se mi poda°ilo zprovoznit jen se zapnut²m pou₧φvßnφm MFC. Musφte vlo₧it hlaviΦkov² soubor afx.h
Makro TRACE je obdoba klasickΘ funkce printf, ale narozdφl od nφ
nevypisuje na obrazovku, ale do v²stupnφho okna ve Visual C++. Stejn∞ jako
makro ASSERT se p°i p°ekladu jako release vypouÜtφ.
Aby TRACE fungovalo musφte aplikaci spustit pomocφ F5 (lad∞nφ) a mφt
nainstalovßnu podporu pro TRACE, tj. program tracer.exe, kter² je standartnφ
souΦßstφ MS Visual C++.
Pokud mßte tedy v programu pou₧ito TRACE a spustφte jej v ladφcφm re₧imu (F5), zφskßte po ukonΦenφ programu jeho v²stup v okn∞ Visual C++ mezi standartnφmi v²stupy, jak m∙₧ete vid∞t na nßsledujφcφm obrßzku.
Toto makro mß smysl jen kdy₧ u₧φvßte MFC. ZjiÜ¥uje zda ukazatel je platn²m ukazatelem na inicializovanΘho potomka t°φdy CObject. Jinak se chovß stejn∞ jako makro ASSERT. Proto je vhodnΘ pro hlφdßnφ zda nßhodou nebyla n∞jakß t°φda smazßna z pam∞ti.
P°φklad pou₧itφ:
CObject* pObj;
ASSERT_VALID(pObj); // P°eruÜφ aplikaci, proto₧e je ukazatel neinicializovan²
pObj = new CObject;
ASSERT_VALID(pObj); // Neud∞lß nic proto₧e pObj je platn² ukazatel na inicializovan² ukazatel na CObject