Postupy: Ladění optimalizovaného kódu
[!POZNÁMKA]
Dialogová okna a příkazy nabídek, které vidíte, se mohou lišit od těch popsaných v nápovědě v závislosti na aktivních nastaveních nebo edici.Chcete-li změnit nastavení, zvolte nastavení importu a exportu v nabídce Nástroje.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.
[!POZNÁMKA]
/Zo (rozšířené optimalizované ladění)Možnosti kompilátoru (zavedena v sadě Visual Studio Update 3) generuje širší škálou funkcí informace o ladění pro optimalizaci kódu (projekty, které nejsou vytvořených pomocí /Od možnosti kompilátoru.See /O možnosti (optimalizace kódu)).To zahrnuje zdokonalenou podporu pro ladění, místní proměnné a vložená funkce.
Upravit a pokračovat je zakázáno při /Zo ocompiler možnost se používá.
Když kompilátor optimalizuje kódu, přemístí a budou znovu uspořádána pokyny.Výsledkem efektivnější kompilovaný kód.Z důvodu této změny uspořádání nelze ladicí program rozpoznat vždy zdrojový kód, který odpovídá sada instrukcí.
Optimalizace mohou ovlivnit:
Místní proměnné, které lze odebrat pomocí pro optimalizaci nebo přesunut do umístění, které ladicí program nedokáže zpracovat.
Pozice v rámci funkce, které se změní, když pro optimalizaci sloučí bloky kódu.
Názvy funkcí pro rámce v zásobníku volání, které mohou být nesprávné, pokud pro optimalizaci sloučí dvě funkce.
Rámce, které se zobrazí v zásobníku volání jsou téměř vždy správné, ovšem za předpokladu, že máte symboly pro všechny rámce.Pokud máte poškození zásobníku, pokud máte funkce v jazyce sestavení, nebo pokud nejsou rámce operačního systému bez odpovídající symboly v zásobníku volání, budou chybné rámce v zásobníku volání.
Globální a statické proměnné jsou vždy zobrazeny správně.To je strukturu rozložení.Pokud máte ukazatel na strukturu a ukazatel myši nad hodnotu správná, bude obsahovat všechny členské proměnné struktury správnou hodnotu.
Vzhledem k těmto omezením by měl ladit, pokud možno pomocí neoptimalizované verze aplikace.Ve výchozím nastavení je optimalizace vypnuta v konfiguraci ladění programu Visual C++ a v konfiguraci verze povolena.
Chybu však může zobrazit pouze v optimalizovanou verzi programu.V takovém případě musíte ladit optimalizaci kódu.
Chcete-li zapnout optimalizace v ladicího konfiguraci sestavení
Když vytvoříte nový projekt, vyberte Win32 Debug cíl.Použití Win32Debug cíl, dokud váš program je plně ladit a jste připraveni k vytváření Win32 Release cíl.Kompilátor není optimální Win32 Debug cíl.
Vyberte projekt v Průzkumníku řešení.
Na zobrazení nabídce klepněte na tlačítko stránky vlastností.
V stránky vlastností dialogové okno zkontrolujte, zda Debug se vybírá v konfigurace rozevíracího seznamu.
V zobrazení složky na levé straně, vyberte C/C++ složky.
V části C++ složku, vyberte možnost Optimization.
V seznamu vlastnosti v pravé části Najít Optimization.Nastavení vedle sebe pravděpodobně říká Disabled (/Od).Choose one of the other options (Minimum Size(/O1), Maximum Speed(/O2), Full Optimization(/Ox), or Custom).
Pokud jste zvolili Custom možnost Optimization, nyní lze nastavit možnosti pro žádné jiné vlastnosti uvedeny v seznamu vlastnosti.
Vlastnosti mezipamětí, C/C++, uzel příkazového řádku stránky vlastnosti projektu, vyberte a přidejte (/Zo) k další možnosti textového pole.
Upozornění /Zovyžaduje sadu Visual Studio 2013 Update 3 nebo novější.
Přidání /Zo zakáže upravit a pokračovat.
Při ladění optimalizaci kódu pomocí převodu okna zobrazíte jaké pokyny ve skutečnosti jsou vytvářena a provedení.Až budete nastavovat zarážky, musíte vědět, zda může být zarážky přesunout spolu s instrukce.Zvažte například následující kód:
for (x=0; x<10; x++)
Předpokládejme, že nastavení zarážky na tento řádek.Byste očekávali zarážky být narazí 10krát, ale pokud kód je optimalizována, zarážky je zasažení pouze jednou.Důvodem je, že první pokyn nastaví hodnotu x na hodnotu 0.Kompilátor rozpozná, že to pouze je nutné provést jednou a přesune z cyklu.Zarážky přesune s ním.Pokyny, které porovnání a zvýšit x zůstat v rámci cyklu.Při zobrazení zpětný překlad okna, krok jednotka je automaticky nastaven na pokyn větší kontrolu, které lze využít při krokování optimalizované kódu.