Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Dynamické ladění jazyka C++ je aktuálně ve verzi Preview. Tyto informace se týkají předběžné verze funkce, která se může před vydáním podstatně upravit. Společnost Microsoft neposkytuje žádné záruky, vyjádřené ani předpokládané, pokud jde o informace uvedené zde.
Tato funkce Preview, která je dostupná od sady Visual Studio 2022 verze 17.14 Preview 2, se vztahuje pouze na projekty x64.
Pomocí dynamického ladění jazyka C++ můžete ladit optimalizovaný kód, jako by byl neoptimalizovaný. Tato funkce je užitečná pro vývojáře, kteří vyžadují výhody výkonu optimalizovaného kódu, jako jsou vývojáři her, kteří potřebují vysokou míru snímků. Pomocí dynamického ladění jazyka C++ si můžete vychutnat zážitek z ladění neoptimalizovaného kódu, aniž byste obětovali výkonnostní výhody optimalizovaných sestavení.
Ladění optimalizovaného kódu představuje výzvy. Kompilátor přemísťuje a reorganizuje pokyny pro optimalizaci kódu. Výsledek je efektivnější kód, ale znamená to:
- Optimalizátor může odebrat místní proměnné nebo je přesunout do umístění neznámých pro ladicí program.
- Kód uvnitř funkce už nemusí být v souladu se zdrojovým kódem, když optimalizátor sloučí bloky kódu.
- Názvy funkcí v zásobníku volání můžou být chybné, pokud optimalizátor sloučí dvě funkce.
V minulosti se vývojáři zabývali těmito a dalšími problémy při ladění optimalizovaného kódu. Nyní jsou tyto výzvy eliminovány, protože pomocí dynamického ladění jazyka C++ můžete krokovat do optimalizovaného kódu, jako by byl neoptimalizovaný.
Kromě generování optimalizovaných binárních souborů kompilování pomocí /dynamicdeopt generuje neoptimalizované binární soubory, které se používají při ladění. Když do funkce přidáte zarážku nebo do ní vstoupíte (včetně funkcí __forceinline), ladicí program načte neoptimalizovaný binární kód. Pak můžete ladit neoptimalizovaný kód pro funkci místo optimalizovaného kódu. Ladění můžete provést tak, jako kdybyste ladili neoptimalizovaný kód, zatímco stále získáte výhody výkonu optimalizovaného kódu ve zbývající části programu.
Vyzkoušení dynamického ladění jazyka C++
Nejprve si projdeme, jaké to je ladit optimalizovaný kód. Pak uvidíte, jak dynamické ladění C++ zjednodušuje proces.
Vytvořte nový projekt konzolové aplikace C++ v sadě Visual Studio. Obsah souboru ConsoleApplication.cpp nahraďte následujícím kódem:
// Code generated by GitHub Copilot #include <iostream> #include <chrono> #include <thread> using namespace std; int step = 0; const int rows = 20; const int cols = 40; void printGrid(int grid[rows][cols]) { cout << "Step: " << step << endl; for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { cout << (grid[i][j] ? '*' : ' '); } cout << endl; } } int countNeighbors(int grid[rows][cols], int x, int y) { int count = 0; for (int i = -1; i <= 1; ++i) { for (int j = -1; j <= 1; ++j) { if (i == 0 && j == 0) { continue; } int ni = x + i; int nj = y + j; if (ni >= 0 && ni < rows && nj >= 0 && nj < cols) { count += grid[ni][nj]; } } } return count; } void updateGrid(int grid[rows][cols]) { int newGrid[rows][cols] = { 0 }; for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { int neighbors = countNeighbors(grid, i, j); if (grid[i][j] == 1) { newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1; } else { newGrid[i][j] = (neighbors == 3) ? 1 : 0; } } } // Copy newGrid back to grid for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { grid[i][j] = newGrid[i][j]; } } } int main() { int grid[rows][cols] = { 0 }; // Initial configuration (a simple glider) grid[1][2] = 1; grid[2][3] = 1; grid[3][1] = 1; grid[3][2] = 1; grid[3][3] = 1; while (true) { printGrid(grid); updateGrid(grid); std::this_thread::sleep_for(std::chrono::milliseconds(100)); cout << "\033[H\033[J"; // Clear the screen step++; } return 0; }Změňte rozevírací seznam konfigurací řešení na Verze. Ujistěte se, že rozevírací seznam platformy řešení je nastavený na x64.
Znovu sestavit vybráním Sestavení>Znovu sestavit řešení.
Nastavte bod přerušení na řádku 55,
int neighbors = countNeighbors(grid, i, j);vupdateGrid(). Spusťte program.Po dosažení zarážky zobrazte okno Místní hodnoty. V hlavní nabídce vyberte Ladění>Windows>Místní. Všimněte si, že v okně
inevidíte hodnotujani . Kompilátor je optimalizoval a odstranil.Zkuste nastavit zarážku na řádku 19,
cout << (grid[i][j] ? '*' : ' ');vprintGrid(). Nemůžete. Toto chování se očekává, protože kompilátor optimalizoval kód.
Zastavte program a povolte dynamické ladění C++ a zkuste to znovu.
Ve Průzkumníku řešeníklikněte pravým tlačítkem na projekt a poté vyberte Vlastnosti pro otevření stránek vlastností projektu.
Vyberte Pokročilé>Použít dynamické ladění C++a změňte nastavení na Ano.
Stránka vlastností se otevře na Vlastnosti konfigurace > Pokročilé > Dynamické ladění v C++. Vlastnost je nastavena na Ano.
Tento krok přidá
/dynamicdeoptpřepínač do kompilátoru a linkeru. Na pozadí také vypne přepínače optimalizace C++/GLa/OPT:ICF. Toto nastavení nepřepíše přepínače, které jste přidali ručně do příkazového řádku nebo jiných přepínačů optimalizace, které jsou nastavené, například/O1.Znovu sestavit vybráním Sestavení>Znovu sestavit řešení. Zobrazí se diagnostický kód sestavení
MSB8088, který indikuje, že dynamické ladění a optimalizace celého programu nejsou kompatibilní. Tato chyba znamená, že během kompilace se automaticky vypnula celá optimalizace programu (/GL).Ve vlastnostech projektu můžete ručně vypnout optimalizaci celého programu. Vyberte Vlastnosti konfigurace>Rozšířené>Optimalizace celého programua změňte nastavení na Vypnuto. Nyní
MSB8088se považuje za upozornění, ale v budoucí verzi sady Visual Studio to může být považováno za chybu.Spusťte aplikaci znovu.
Když se teď dostanete na zarážku na řádku 55, zobrazí se hodnoty
iajv okně Lokální. Okno Zásobník volání ukazuje, žeupdateGrid()je neoptimalizován a název souboru jelife.alt.exe. Tento alternativní binární soubor slouží k ladění optimalizovaného kódu.
Zarážka se zobrazí ve funkci updateGrid. Zásobník volání ukazuje, že funkce je neoptimalizovaná a název souboru je life.alt.exe. V okně Místní hodnoty se zobrazují hodnoty i a j a další místní proměnné ve funkci.
Funkce
updateGrid()je na požádání deoptimalizována, protože jste v ní nastavili bod přerušení. Pokud při ladění přejdete přes optimalizovanou funkci, není zrušena její optimalizace. Pokud vstoupíte do funkce, dojde k její deoptimalizaci. Hlavním způsobem, jak způsobit deoptimalizaci funkce, je nastavit v ní zarážku nebo přejít do ní.Funkci můžete také deoptimalizovat v okně Zásobník volání. Klikněte pravým tlačítkem myši na funkci nebo na vybranou skupinu funkcí a vyberte Deoptimalizovat u další položky. Tato vlastnost je užitečná, když chcete zobrazit místní proměnné v optimalizované funkci, pro kterou jste jinde v zásobníku volání nezadali bod přerušení. Funkce, které jsou tímto způsobem deoptimalizovány, jsou seskupeny v okně zarážky jako skupina zarážek s názvem Deoptimized Functions. Pokud odstraníte skupinu zarážek, přidružené funkce se vrátí do optimalizovaného stavu.
Použijte podmíněné a závislé body přerušení
Zkuste znovu nastavit zarážku na řádku 19,
cout << (grid[i][j] ? '*' : ' ');vprintGrid(). Teď to funguje. Nastavení zarážky ve funkci vede k její deoptimalizaci, takže ji můžete běžně ladit.Klikněte pravým tlačítkem myši na zarážku na řádku 19, vyberte Podmínkya nastavte podmínku na
i == 10 && j== 10. Potom zaškrtněte políčko Povolit pouze v případech, kdy je nalezena následující zarážka: zaškrtávací políčko. V rozevíracím seznamu vyberte bod přerušení na řádku 55. Teď se zarážka na řádku 19 neaktivuje, dokud není aktivována zarážka na řádku 50 jako první, a pak když segrid[10][10]chystá odeslat výstup do konzoly.Cílem je nastavit podmíněné a závislé zarážky v optimalizované funkci a využívat místní proměnné a řádky kódu, které v optimalizovaném sestavení nemusí být pro ladicí program k dispozici.
Podmíněná zarážka je ukázána na řádku 19, cout < < (grid[i][j] ? '*' : ' ');. Podmínka je nastavená na i == 10 && j== 10. Zaškrtnuto je políčko, které umožňuje povolit pouze v případě, že je zasažena následující zarážka. Rozevírací seznam zarážek je nastaven na řádek 55 v souboru life.cpp.
Pokračujte ve spuštění aplikace. Po dosažení zarážky na řádku 19 můžete kliknout pravým tlačítkem myši na řádek 15 a vybrat Nastavit další příkaz a znovu spustit smyčku.
Podmíněný a závislý bod přerušení je dosažen na řádku 19, cout < < (mřížka[i][j] ? '*' : ' ');. V okně Místní hodnoty se zobrazují hodnoty i a j a další místní proměnné ve funkci. Okno Zásobník volání ukazuje, že funkce je neoptimalizovaná a název souboru je life.alt.exe.
Odstraňte všechny zarážky, abyste vrátili neoptimalizované funkce do optimalizovaného stavu. V hlavní nabídce sady Visual Studio vyberte Ladit>Odstranit všechny zarážky. Všechny funkce se pak vrátí do optimalizovaného stavu.
Pokud přidáte body přerušení prostřednictvím okna Zásobník volání pomocí možnosti Deoptimalizovat u další položky, což jsme v tomto návodu neudělali, můžete kliknout pravým tlačítkem na skupinu Funkce deoptimalizované a vybrat Odstranit, aby se jen funkce v této skupině vrátily do optimalizovaného stavu.
V okně Lomové body se zobrazí skupina Deoptimalizované funkce. Skupina je vybraná a místní nabídka je otevřena s vybranou možností Odstranit skupinu bodů přerušení.
Vypnutí dynamického ladění C++
Možná budete muset ladit optimalizovaný kód, aniž by byl deoptimalizován, nebo vložit zarážku do optimalizovaného kódu a zajistit, aby kód zůstal optimalizován, když zarážka zasáhne. Existuje několik způsobů, jak vypnout dynamické ladění nebo zabránit znehodnocení optimalizace kódu při dosažení místa přerušení:
- V hlavní nabídce sady Visual Studio vyberte Možnosti nástrojů>. V podokně Možnosti rozbalte část Všechna nastavení>ladění>obecné. Zrušte zaškrtnutí políčka Automaticky deoptimalizovat laděné funkce, pokud je to možné (.NET 8+, Dynamické ladění jazyka C++). Při příštím spuštění ladicího programu zůstane kód optimalizovaný.
- V hlavní nabídce sady Visual Studio vyberte Možnosti nástrojů>. V dialogovém okně Možnosti rozbalte část ladění>Obecné. Zrušte zaškrtnutí políčka Automaticky deoptimalizovat laděné funkce, pokud je to možné (.NET 8+, Dynamické ladění jazyka C++). Při příštím spuštění ladicího programu zůstane kód optimalizovaný.
- Mnoho dynamických zarážek ladění je ve skutečnosti tvořeno dvěma zarážkami: jedna je v optimalizovaném binárním souboru a druhá v neoptimalizovaném binárním souboru. V okně Zarážky vyberte Zobrazit sloupce>funkce. Vymažte zarážku přidruženou k binárnímu souboru
alt. Druhý bod přerušení ve dvojici je přerušen v optimalizovaném kódu. - Při ladění v hlavní nabídce sady Visual Studio vyberte Ladění>Windows>Disassembly. Ujistěte se, že je zaostřeno. Když vstoupíte do funkce přes okno Disassembly, funkce nebude deaktivována.
- Zakažte dynamické ladění úplně tím, že nepředáte
/dynamicdeoptdocl.exe,lib.exealink.exe. Pokud používáte knihovny třetích stran a nemůžete je znovu sestavit, nepředávejte/dynamicdeoptběhem konečnéholink.exea zakažte dynamické ladění tohoto binárního souboru. - Pokud chcete rychle zakázat dynamické ladění pro jeden binární soubor (například
test.dll), přejmenujte nebo odstraňte binárníalt(napříkladtest.alt.dll). - Chcete-li zakázat dynamické ladění pro jeden nebo více
.cppsouborů, nepředávejte/dynamicdeoptběhem jejich sestavování. Zbývající část projektu je sestavena pomocí Dynamického ladění.
Povolení dynamického ladění C++ pro unreal Engine 5.6 nebo novější
Unreal Engine 5.6 podporuje dynamické ladění C++ pro unreal Build Tool i Unreal Build Accelerator. Existují dva způsoby, jak ji povolit.
Buď upravte BuildConfiguration.xml soubor, nebo upravte Targets.cs soubor.
Upravit BuildConfiguration.xml soubor
V sadě Visual Studio vyberte konfiguraci vývojového editoru a upravte BuildConfiguration.xml ji tak, aby zahrnovala <bDynamicDebugging>true</bDynamicDebugging>. Další informace o BuildConfiguration.xml a jeho umístění najdete v tématu Konfigurace sestavení.
Jedním ze způsobů, jak najít
BuildConfiguration.xmlsoubor, je spustit sestavení a zkontrolovat výstup protokolu sestavení. Například při sestavování úvodní hry Lyra se zobrazí výstup podobný tomuto:- Running UnrealBuildTool: dotnet "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" LyraEditor Win64 Development -Project="C:\LyraStarterGame\LyraStarterGame.uproject" ... 14% - Log file: C:\Users\<user>\AppData\Local\UnrealBuildTool\Log.txtVyhledejte
Log.txtproBuildConfiguration.xml. Měl by obsahovat řádek jakoReading configuration file from: C:\LyraStarterGame\Saved\UnrealBuildTool\BuildConfiguration.xmlUpravte soubor
BuildConfiguration.xml, aby obsahoval<bDynamicDebugging>true</bDynamicDebugging>:<?xml version="1.0" encoding="utf-8" ?> <Configuration xmlns="https://www.unrealengine.com/BuildConfiguration"> <WindowsPlatform> <bDynamicDebugging>true</bDynamicDebugging> <!-- add this line --> </WindowsPlatform> </Configuration>
Upravit Targets.cs soubor
Dalším způsobem, jak povolit dynamické ladění jazyka C++ pro unreal Build Tool i Unreal Build Accelerator, je upravit soubor Target.cs tak, aby obsahoval WindowsPlatform.bDynamicDebugging = true.
Projekty unreal Engine mají Target.cs soubory přidružené k několika cílovým typům, včetně:
{ProjectName}.Target.cs for the game executable.
{ProjectName}Editor.Target.cs for the editor build.
Pro sestavení editoru {ProjectName}Editor.Target.cs v souboru přidejte WindowsPlatform.bDynamicDebugging = true; do konstruktoru:
public class LyraEditorTarget : TargetRules
{
public LyraEditorTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
WindowsPlatform.bDynamicDebugging = true; // add this line
// Other settings...
}
}
Nebo pro sestavení hry, v souboru {ProjectName}.Target.cs přidejte WindowsPlatform.bDynamicDebugging = true; do ApplyShared{Project name}TargetSettings():
internal static void ApplySharedLyraTargetSettings(TargetRules Target)
{
ILogger Logger = Target.Logger;
WindowsPlatform.bDynamicDebugging = true; // add this line
// Other settings...
}
Další informace o cílových souborech unreal Engine naleznete v tématu Cíle.
Povolení dynamického ladění C++ pro unreal Engine 5.5 nebo starší
V případě Unreal Engine 5.5 nebo starších přebírejte změny nástroje Unreal Build Tool z GitHubu do úložiště.
Poznámka:
Pokud chcete získat přístup k úložištím Epic na GitHubu, potřebujete účet Epic a zaregistrovaný účet GitHub.
Po výběru změn, které se mají v úložišti použít, povolte bDynamicDebugging , jak je popsáno výše. Musíte také použít unreal Build Accelerator z Unreal Engine 5.6. Buď použijte nejnovější bity z ue5-main, nebo zakažte UBA přidáním následujícího kódu do BuildConfiguration.xml:
<BuildConfiguration>
<bAllowUBAExecutor>false</bAllowUBAExecutor>
<bAllowUBALocalExecutor>false</bAllowUBALocalExecutor>
</BuildConfiguration>
Další informace o konfiguraci sestavení Unreal Engine naleznete v tématu Konfigurace sestavení.
Řešení problémů
Pokud se body přerušení nespustí v deoptimalizovaných funkcích:
Pokud vystoupíte z rámce
[Deoptimized], můžete být v optimalizovaném kódu, pokud nebyl volající neoptimalizován kvůli zarážce v něm nebo pokud jste při cestě k aktuální funkci vstoupili do volajícího.Ujistěte se, že jsou vytvořené soubory
alt.exeaalt.pdb. Protest.exeatest.pdb,test.alt.exeatest.alt.pdbmusí existovat ve stejném adresáři. Ujistěte se, že jsou nastaveny správné přepínače sestavení podle tohoto článku.V
debug directoryexistuje položkatest.exe, kterou ladicí program používá k nalezení binárního souborualt, jenž se má použít pro deoptimalizované ladění. Otevřete příkazový řádek sady Visual Studio nativní pro x64 a spusťtelink /dump /headers <your executable.exe>, abyste zjistili, jestlideoptpoložka existuje. Položkadeoptse zobrazí ve sloupciType, jak je znázorněno na posledním řádku tohoto příkladu:Debug Directories Time Type Size RVA Pointer -------- ------- -------- -------- -------- 67CF0DA2 cv 30 00076330 75330 Format: RSDS, {7290497A-E223-4DF6-9D61-2D7F2C9F54A0}, 58, D:\work\shadow\test.pdb 67CF0DA2 feat 14 00076360 75360 Counts: Pre-VC++ 11.00=0, C/C++=205, /GS=205, /sdl=0, guardN=204 67CF0DA2 coffgrp 36C 00076374 75374 67CF0DA2 deopt 22 00076708 75708 Timestamp: 0x67cf0da2, size: 532480, name: test.alt.exePokud položka ladicího adresáře
deoptneexistuje, ověřte, že/dynamicdeoptpředáváte docl.exe,lib.exealink.exe.Dynamická deoptimalizace nebude fungovat konzistentně, pokud
/dynamicdeoptnení předána docl.exe,lib.exealink.exepro všechny.cpp,.liba binární soubory. Ověřte, že jsou při sestavování projektu nastavené správné přepínače.
Další informace o známých problémech naleznete v tématu dynamické ladění C++: Úplná debuggibilita pro optimalizovaná sestavení.
Pokud věci nefungují podle očekávání, vytvořte ticket v komunitě vývojářů . Uveďte co nejvíce informací o problému.
Obecné poznámky
IncrediBuild 10.24 podporuje dynamické ladění sestavení C++.
FastBuild verze 1.15 podporuje sestavení dynamického ladění jazyka C++.
Funkce, které jsou vloženy, jsou na vyžádání deoptimalizované. Pokud nastavíte bod přerušení u vložené funkce, ladicí program deoptimalizuje ji i funkci jejího volajícího. Bod přerušení zasáhne tam, kde očekáváte, jako kdyby byl váš program sestaven bez optimalizací kompilátoru.
Funkce zůstane neoptimalizovaná, i když zarážky v ní zakážete. Aby se funkce vrátila do optimalizovaného stavu, musíte odstranit bod přerušení.
Mnoho dynamických zarážek ladění je ve skutečnosti tvořeno dvěma zarážkami: jedna je v optimalizovaném binárním souboru a druhá v neoptimalizovaném binárním souboru. Z tohoto důvodu vidíte v okně Přerušovací body více než jeden přerušovací bod.
Příznaky kompilátoru, které se používají pro deoptimalizovanou verzi, jsou stejné jako příznaky, které se používají pro optimalizovanou verzi, s výjimkou příznaků optimalizace a /dynamicdeopt. Toto chování znamená, že všechny příznaky, které jste nastavili pro definování maker a tak dále, jsou nastavené také ve verzi bez optimalizace.
Neoptimalizovaný kód není stejný jako ladicí kód. Deoptimalizovaný kód je zkompilován se stejnými příznaky optimalizace jako optimalizovaná verze, proto nejsou zahrnuty aserty a další kód, který spoléhá na nastavení určené pro ladění.
Sestavení integrace systému
Dynamické ladění jazyka C++ vyžaduje, aby byly příznaky kompilátoru a linkeru nastaveny určitým způsobem. Následující části popisují, jak nastavit vyhrazenou konfiguraci pro dynamické ladění, která nemá konfliktní přepínače.
Pokud je váš projekt sestaven pomocí systému sestavení Visual Studio, dobrým způsobem, jak vytvořit konfiguraci dynamického ladění, je použít Správce konfigurace k naklonování konfigurace pro vydání nebo pro ladění a provést změny, které vyhovují dynamickému ladění. Následující dvě části popisují postupy.
Vytvořit novou konfiguraci pro vydání
V hlavní nabídce sady Visual Studio vyberte Build>Configuration Manager a otevřete Configuration Manager.
Vyberte rozevírací seznam Konfigurace a pak vyberte <Nový...>.
V nástroji Configuration Manager je v části Kontexty projektu otevřený rozevírací seznam Konfigurace a zvýrazněný
. Otevře se dialogové okno Nová konfigurace řešení. Do pole Název zadejte název nové konfigurace, například
ReleaseDD. Ujistěte se, že Nastavení kopírování z: je nastaveno na Release. Potom vyberte OK a vytvořte novou konfiguraci.
Pole Název je nastavené na ReleaseDD. Rozevírací seznam 'Kopírovat nastavení z' je nastaven na Release.
Nová konfigurace se zobrazí v rozevíracím seznamu Konfigurace aktivního řešení. Vyberte Zavřít.
V rozevíracím seznamu Konfigurace nastavený na ReleaseDDklikněte pravým tlačítkem na projekt v Průzkumníku řešení a vyberte Vlastnosti.
Ve vlastnostech konfigurace >Rozšířenénastavte Použít dynamické ladění C++ na Ano.
Ujistěte se, že je optimalizace celého programu nastavena na Žádná optimalizace.
Stránka vlastností se otevře ve vlastnostech konfigurace > Upřesnit. Použijte dynamické ladění jazyka C++. Vlastnost je nastavena na Ano. Optimalizace celého programu je nastavená na Ne.
V Vlastnosti konfigurace>Linker>Optimalizacezajistěte, aby Povolit skládání COMDAT bylo nastaveno na Ne (/OPT:NOICF).
Stránka vlastností se otevře v části Vlastnosti konfigurace > Linker > Optimalizace > Povolit skládání CMDAT. Vlastnost je nastavena na Ne (/OPT:NOICF).
Toto nastavení přidá přepínač /dynamicdeopt do kompilátoru a linkeru. S vypnutými přepínači optimalizace /GL a /OPT:ICF jazyka C++ nyní můžete sestavit a spustit projekt v nové konfiguraci, pokud chcete optimalizovaný release build, které můžete s dynamickým laděním C++ použít.
Do této konfigurace můžete přidat další přepínače, které používáte s finálními verzemi, abyste měli vždy přesně zapnuté nebo vypnuté přepínače, jak očekáváte při použití funkce dynamického ladění. Další informace o přepínačích, které byste neměli používat s dynamickým laděním, naleznete v tématu Nekompatibilní možnosti.
Další informace o konfiguracích v sadě Visual Studio najdete v tématu Vytvoření a úprava konfigurací.
Vytvoření nové konfigurace ladění
Pokud chcete použít binární soubory ladění, ale chcete, aby běžely rychleji, můžete upravit konfiguraci ladění.
V hlavní nabídce sady Visual Studio vyberte Build>Configuration Manager a otevřete Configuration Manager.
Vyberte rozevírací seznam Konfigurace a pak vyberte <Nový...>.
V nástroji Configuration Manager je v části Kontexty projektu okna otevřený rozbalovací seznam Konfigurace a zvýrazněno
. Otevře se dialogové okno Nová konfigurace projektu. Do pole Název zadejte název nové konfigurace, například DebugDD. Ujistěte se, že Nastavení kopírování z: jsou nastaveny na Ladění. Potom vyberte OK a vytvořte novou konfiguraci.
Pole s názvem je nastavené na DebugDD. Nastavení kopírování z: rozevírací seznam je nastaven na Ladit.
Nová konfigurace se zobrazí v rozevíracím seznamu Konfigurace aktivního řešení. Vyberte Zavřít.
V rozevíracím seznamu Konfigurace nastaveném na DebugDDklikněte pravým tlačítkem myši na váš projekt v Průzkumníku řešení a vyberte Vlastnosti.
V Vlastnosti konfigurace>C/C++>Optimalizacezapněte požadované optimalizace. Můžete například nastavit optimalizace tak, aby se maximalizovala rychlost (/O2).
V C/C++>generování kódunastavte základní běhové kontroly na Výchozí.
V C/C++>Obecné, zakažte Podpora ladění pouze mého kódu.
Nastavte formát informací o ladění na Program Database (/Zi).
Do této konfigurace můžete přidat další přepínače, které používáte s ladicími sestaveními, abyste měli vždy přesně ty přepínače zapnuté nebo vypnuté, které očekáváte při použití dynamického ladění. Další informace o přepínačích, které byste neměli používat s dynamickým laděním, naleznete v tématu Nekompatibilní možnosti.
Další informace o konfiguracích v sadě Visual Studio najdete v tématu Vytvoření a úprava konfigurací.
Úvahy o vlastním systému sestavení
Pokud máte vlastní systém sestavení, ujistěte se, že:
- Předejte
/dynamicdeoptdocl.exe,lib.exe, alink.exe. - Nepoužívejte
/ZI, žádný z příznaků/RTCani/JMC.
Pro distributoři pro sestavení:
- Pro projekt s názvem
testkompilátor vytvořítest.alt.obj,test.alt.exp,test.objatest.exp. Linker vytvářítest.alt.exe,test.alt.pdb,test.exeatest.pdb. - Je potřeba nasadit nový binární soubor nástrojů
c2dd.dll, spolu sc2.dll.
Nekompatibilní možnosti
Některé možnosti kompilátoru a linkeru nejsou kompatibilní s dynamickým laděním jazyka C++. Pokud zapnete dynamické ladění C++ pomocí nastavení projektu sady Visual Studio, nekompatibilní možnosti se automaticky vypnou, pokud je výslovně nenastavíte v nastavení dalších možností příkazového řádku.
Následující možnosti kompilátoru nejsou kompatibilní s dynamickým laděním jazyka C++:
/GH
/GL
/Gh
/RTC1
/RTCc
/RTCs
/RTCu
/ZI (/Zi is OK)
/ZW
/clr
/clr:initialAppDomain
/clr:netcore
/clr:newSyntax
/clr:noAssembly
/clr:pure
/clr:safe
/fastcap
/fsanitize=address
/fsanitize=kernel-address
Následující možnosti linkeru nejsou kompatibilní s dynamickým laděním jazyka C++:
/DEBUG:FASTLINK
/INCREMENTAL
/OPT:ICF You can specify /OPT:ICF but the debugging experience may be poor
Viz také
příznak kompilátoru /dynamicdeopt (náhled)
Příznak linkeru /DYNAMICDEOPT (preview)
C++ Dynamické ladění: Úplná možnost ladění optimalizovaných sestavení
Ladění optimalizovaného kódu