Konfigurera CMake-felsökningssessioner
Inbyggt CMake-stöd är tillgängligt i Visual Studio 2017 och senare. Om du vill se dokumentationen för dessa versioner, ställ in artikelns markör för Visual Studio version till Visual Studio 2017 eller senare. Den finns överst i innehållsförteckningen på den här sidan.
Alla körbara CMake-mål visas i listrutan Startobjekt i verktygsfältet. Välj en för att starta en felsökningssession och starta felsökningsprogrammet.
Listrutan innehåller en lista över felsökningsmål att välja mellan. Det markerade objektet visas som en uppspelningsknapp följt av namnet på det valda felsökningsmålet som ska köras. I det här exemplet är det valda felsökningsmålet Hello World .exe.
Du kan också starta en felsökningssession från Solution Explorer. Växla först till CMake Targets View i Solution Explorer-fönstret.
Lösningsutforskaren visas. Ett högerklicka på ett objekt i mappvyn har öppnat en meny som visar alternativ som Öppna, Öppna med, Jämför med och så vidare. Menyalternativet Växla till målvy är markerat.
Högerklicka sedan på en körbar fil och välj Felsök. Det här kommandot börjar automatiskt felsöka det valda målet baserat på din aktiva konfiguration.
Ett högerklicka på ett mål i vyn CMake-mål har öppnat en meny med alternativ som Ange som startobjekt, Skapa, Rensa alla och så vidare. Menyalternativet Felsök är markerat.
Från och med Visual Studio 2022 version 17.6 kan du också starta en felsökningssession på CMakeLists.txt-filen. Det gör du genom att ange en brytpunkt i filen CMakeLists.txt och köra Konfigurera projekt med CMake-felsökningsprogrammet från listrutan Project.
Listrutan Projekt visas. Menyalternativet för att konfigurera projekt med CMake-felsökningsprogrammet är markerat.
Anpassa inställningar för felsökning
Du kan anpassa felsökningsinställningarna för alla körbara CMake-mål i projektet. De finns i en konfigurationsfil med namnet launch.vs.json, som finns i en .vs
mapp i projektroten. En startkonfigurationsfil är användbar i de flesta felsökningsscenarier eftersom du kan konfigurera och spara information om felsökningskonfigurationen. Det finns tre startpunkter i den här filen:
- Felsökningsmeny: Välj Felsökning > Felsökning och Startinställningar för ${activeDebugTarget} från huvudmenyn för att anpassa felsökningskonfigurationen som är specifik för ditt aktiva felsökningsmål. Om du inte har valt något felsökningsmål är det här alternativet inaktiverat.
- Målvyn: Navigera till Målvyn i Solution Explorer. Högerklicka sedan på ett felsökningsmål och välj Lägg till felsökningskonfiguration för att anpassa felsökningskonfigurationen som är specifik för det valda målet.
-
Root CMakeLists.txt: Högerklicka på en rot CMakeLists.txt och välj Lägg till felsökningskonfiguration för att öppna dialogrutan Välj en felsökare. I dialogrutan kan du lägga till valfri typ av felsökningskonfiguration, men du måste ange CMake-målet manuellt för att anropa via egenskapen
projectTarget
.
Du kan redigera launch.vs.json-filen för att skapa felsökningskonfigurationer för valfritt antal CMake-mål. När du sparar filen skapar Visual Studio en post för varje ny konfiguration i listrutan startobjekt.
Referensnycklar i CMakeSettings.json
Om du vill referera till en nyckel i en CMakeSettings.json-fil, lägg till cmake.
före den i launch.vs.json. I följande exempel visas en enkel launch.vs.json fil som hämtar värdet för remoteCopySources
-nyckeln i CMakeSettings.json-filen för den aktuella konfigurationen:
{
"version": "0.2.1",
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "CMakeHelloWorld.exe (Debug\\CMakeHelloWorld.exe)",
"name": "CMakeHelloWorld.exe (Debug\\CMakeHelloWorld.exe)",
"args": ["${cmake.remoteCopySources}"]
}
]
}
Miljövariabler definieras i CMakeSettings.json kan också användas i launch.vs.json med hjälp av syntaxen ${env.VARIABLE_NAME}
. I Visual Studio 2019 version 16.4 och senare startas felsökningsmål automatiskt med den miljö som du anger i CMakeSettings.json. Du kan ta bort en miljövariabel genom att ställa in den på null-.
Launch.vs.json referens
Det finns många launch.vs.json egenskaper som stöder alla felsökningsscenarier. Följande egenskaper är gemensamma för alla felsökningskonfigurationer, både fjärranslutna och lokala:
projectTarget
: Anger CMake-målet som ska anropas när projektet skapas. Visual Studio fyller i den här egenskapen automatiskt om du anger launch.vs.json från felsökningsmenyn eller målvyn. Det här värdet måste matcha namnet på ett befintligt felsökningsmål som anges i listrutan startobjekt.env
: Ytterligare miljövariabler att lägga till med hjälp av syntaxen:"env": { "DEBUG_LOGGING_LEVEL": "trace;info", "ENABLE_TRACING": "true" }
args
: Kommandoradsargument som skickas till programmet för felsökning.
Launch.vs.json referens för fjärrprojekt och WSL
I Visual Studio 2019 version 16.6 lade vi till en ny felsökningskonfiguration av type: cppgdb
för att förenkla felsökning på fjärrsystem och WSL. Gamla felsökningskonfigurationer för type: cppdbg
stöds fortfarande.
Konfigurationstyp cppgdb
-
name
: Ett vänligt namn för att identifiera konfigurationen i listrutan för startobjekt . -
project
: Anger den relativa sökvägen till projektfilen. Normalt behöver du inte ändra den här sökvägen när du felsöker ett CMake-projekt. -
projectTarget
: Anger CMake-målet som ska anropas när projektet skapas. Visual Studio fyller i den här egenskapen automatiskt om du anger launch.vs.json från felsökningsmenyn eller målvyn. Det här målvärdet måste matcha namnet på ett befintligt felsökningsmål som anges i listrutan startobjekt. -
debuggerConfiguration
: Anger vilken uppsättning felsökningsstandardvärden som ska användas. I Visual Studio 2019 version 16.6 är det enda giltiga alternativetgdb
. Visual Studio 2019 version 16.7 eller senare stöder ävengdbserver
. -
args
: Kommandoradsargument som skickas vid start till programmet som debuggas. -
env
: Ytterligare miljövariabler som skickas till programmet som debuggas. Till exempel{"DISPLAY": "0.0"}
. -
processID
: Linux-process-ID att ansluta till. Används endast vid anslutning till en fjärrprocess. Mer information finns i Felsöka anslutning till processer med GDB-.
Ytterligare alternativ för konfigurationen av gdb
-
program
: Standardvärdet är"${debugInfo.fullTargetPath}"
. Unix-sökvägen till programmet som ska felsökas. Krävs endast om det skiljer sig från det körbara målet på bygg- eller distributionsplatsen. -
remoteMachineName
: Standardvärdet är"${debugInfo.remoteMachineName}"
. Namnet på fjärrsystemet som är värd för programmet för felsökning. Krävs endast om det skiljer sig från byggsystemet. Det måste finnas en befintlig post i Anslutningshanteraren. Tryck på Ctrl+Space för att visa en lista över alla befintliga fjärranslutningar. -
cwd
: Standardvärdet är"${debugInfo.defaultWorkingDirectory}"
. Unix-sökvägen till katalogen i fjärrsystemet därprogram
körs. Katalogen måste finnas. -
gdbpath
: Standardvärdet är/usr/bin/gdb
. Komplett Unix-sökväg tillgdb
som används för felsökning. Krävs endast om du använder en anpassad version avgdb
. -
preDebugCommand
: Ett Linux-kommando som ska köras omedelbart innangdb
anropas.gdb
startar inte förrän kommandot har slutförts. Du kan använda alternativet för att köra ett skript innan du körgdb
.
Ytterligare alternativ tillåts med konfigurationen gdbserver
(16.7 eller senare)
program
: Standardvärdet är"${debugInfo.fullTargetPath}"
. Unix-sökvägen till programmet som ska felsökas. Krävs endast om det skiljer sig från det körbara målet på bygg- eller distributionsplatsen.Tips
Distribution stöds ännu inte för lokala scenarier för korskompilering. Om du korskompilerar på Windows (till exempel med hjälp av en korskompilator på Windows för att skapa en körbar Linux ARM-fil) måste du kopiera binärfilen manuellt till platsen som anges av
program
på den avlägsna ARM-maskinen innan du börjar felsöka.remoteMachineName
: Standardvärdet är"${debugInfo.remoteMachineName}"
. Namnet på fjärrsystemet som är värd för programmet för felsökning. Krävs endast om det skiljer sig från byggsystemet. Måste ha en befintlig post i Anslutningshanteraren. Tryck på Ctrl+Space för att visa en lista över alla befintliga fjärranslutningar.cwd
: Standardvärdet är"${debugInfo.defaultWorkingDirectory}"
. Fullständig Unix-sökväg till katalogen i fjärrsystemet därprogram
körs. Katalogen måste finnas.gdbPath
: Fullständig Windows-sökväg till dengdb
som används för felsökning.gdbserverPath
: Standardvärdet ärusr/bin/gdbserver
. Fullständig Unix-sökväg tillgdbserver
som används för felsökning.preDebugCommand
: Ett Linux-kommando som ska köras omedelbart innan du startargdbserver
.gdbserver
startar inte förrän kommandot har slutförts.
Implementeringsalternativ
Använd följande alternativ för att separera byggdatorn (definierad i CMakeSettings.json) från fjärrfelsökningsdatorn.
-
remoteMachineName
: Fjärrfelsökningsmaskin. Krävs endast om det skiljer sig från kompilationsmaskinen. Det måste finnas en befintlig post i Anslutningshanteraren. Tryck på Ctrl+Space för att visa en lista över alla befintliga fjärranslutningar. -
disableDeploy
: Standardvärdet ärfalse
. Anger om separationen för build/debug är inaktiverad. Närfalse
är aktiverat, tillåter det här alternativet att bygga och felsöka på två separata datorer. -
deployDirectory
: Fullständig Unix-sökväg till katalogen påremoteMachineName
som den körbara filen kopieras till. -
deploy
: En matris med avancerade distributionsinställningar. Du behöver bara konfigurera de här inställningarna när du vill ha mer detaljerad kontroll över distributionsprocessen. Som standard distribueras endast de filer som krävs för processen för att felsöka till fjärrfelsökningsdatorn.-
sourceMachine
: Datorn som filen eller katalogen kopieras från. Tryck på Ctrl+Space för att visa en lista över alla fjärranslutningar som lagras i Anslutningshanteraren. När du skapar internt på WSL ignoreras det här alternativet. -
targetMachine
: Den dator som filen eller katalogen kopieras till. Tryck på Ctrl+Space för att visa en lista över alla fjärranslutningar som lagras i Anslutningshanteraren. -
sourcePath
: Fil- eller katalogplatsen påsourceMachine
. -
targetPath
: Fil- eller katalogplatsen påtargetMachine
. -
deploymentType
: En beskrivning av distributionstypen.LocalRemote
ochRemoteRemote
stöds.LocalRemote
innebär att kopiera från det lokala filsystemet till fjärrsystemet som anges avremoteMachineName
i launch.vs.json.RemoteRemote
innebär kopiering från fjärrbyggsystemet som anges i CMakeSettings.json till det olika fjärrsystem som anges i launch.vs.json. -
executable
: Anger om den distribuerade filen är en körbar fil.
-
Utföra de anpassade gdb
-kommandona
Visual Studio stöder körning av anpassade gdb
kommandon för att interagera direkt med det underliggande felsökningsprogrammet. För mer information, se Utför anpassade gdb
lldb-kommandon.
Aktivera loggning
Aktivera MIEngine-loggning för att se vilka kommandon som skickas till gdb
, vilka utdata gdb
returnerar och hur lång tid varje kommando tar.
Läs mer
Konfigurationstyp cppdbg
Följande alternativ kan användas vid felsökning på ett fjärrsystem eller WSL med hjälp av cppdbg
konfigurationstyp. I Visual Studio 2019 version 16.6 eller senare rekommenderas konfigurationstyp cppgdb
.
name
: Ett eget namn för att identifiera konfigurationen i listrutan Startobjekt.project
: Anger den relativa sökvägen till projektfilen. Normalt behöver du inte ändra det här värdet när du felsöker ett CMake-projekt.projectTarget
: Anger CMake-målet som ska anropas när projektet skapas. Visual Studio fyller i den här egenskapen automatiskt om du anger launch.vs.json från felsökningsmenyn eller målvyn. Det här värdet måste matcha namnet på ett befintligt felsökningsmål som anges i listrutan startobjekt.args
: Kommandoradsargument som skickas vid start till programmet som debuggas.processID
: Linux-process-ID att ansluta till. Används endast vid anslutning till en fjärrprocess. Mer information finns i Felsöka anslutning till processer med GDB-.program
: Standardvärdet är"${debugInfo.fullTargetPath}"
. Sökvägen i Unix till applikationen som ska felsökas. Krävs endast om det skiljer sig från det körbara målet på bygg- eller distributionsplatsen.remoteMachineName
: Standardvärdet är"${debugInfo.remoteMachineName}"
. Namnet på fjärrsystemet som är värd för programmet för felsökning. Krävs endast om det skiljer sig från byggsystemet. Måste ha en befintlig post i Anslutningshanteraren. Tryck på Ctrl+Space för att visa en lista över alla befintliga fjärranslutningar.cwd
: Standardvärdet är"${debugInfo.defaultWorkingDirectory}"
. Fullständig Unix-sökväg till katalogen i fjärrsystemet därprogram
körs. Katalogen måste finnas.environment
: Ytterligare miljövariabler som skickas till programmet som debuggas. Till exempel"environment": [ { "name": "ENV1", "value": "envvalue1" }, { "name": "ENV2", "value": "envvalue2" } ]
pipeArgs
: En matris med kommandoradsargument som skickas till pipe-programmet för att konfigurera anslutningen. Pipe-programmet används för att vidarebefordra standardindata/utdata mellan Visual Studio ochgdb
. De flesta element i den här matrisen behöver inte anpassas vid felsökning av CMake-projekt. Undantaget är${debuggerCommand}
, som startargdb
på fjärrsystemet. Den kan ändras till:Exportera värdet för miljövariabeln DISPLAY i Linux-systemet. I följande exempel är det här värdet
:1
."pipeArgs": [ "/s", "${debugInfo.remoteMachineId}", "/p", "${debugInfo.parentProcessId}", "/c", "export DISPLAY=:1;${debuggerCommand}", "--tty=${debugInfo.tty}" ],
Kör ett skript innan du kör
gdb
. Kontrollera att körningsbehörigheter har angetts för skriptet."pipeArgs": [ "/s", "${debugInfo.remoteMachineId}", "/p", "${debugInfo.parentProcessId}", "/c", "/path/to/script.sh;${debuggerCommand}", "--tty=${debugInfo.tty}" ],
stopOnEntry
: Ett booleskt värde som anger om processen ska brytas så snart processen startas. Standardvärdet är falskt.visualizerFile
: En .natvis-fil att använda när du felsöker den här processen. Det här alternativet är inte kompatibelt medgdb
förskönad utskrift. Ange ävenshowDisplayString
när du anger den här egenskapen.showDisplayString
: Ett booleskt värde som aktiverar visningssträngen när envisualizerFile
anges. Om du anger det här alternativet tilltrue
kan det orsaka långsammare prestanda vid felsökning.setupCommands
: Ett eller fleragdb
kommandon som ska köras för att konfigurera det underliggande felsökningsprogrammet.miDebuggerPath
: Den fullständiga sökvägen tillgdb
. När det är ospecificerat söker Visual Studio först efter felsökningsprogrammet i PATH.Slutligen kan alla distributionsalternativ som definierats för
cppgdb
konfigurationstyp användas avcppdbg
konfigurationstyp.
Felsöka med hjälp av gdbserver
Du kan konfigurera cppdbg
-konfigurationen för felsökning med hjälp av gdbserver
. Du hittar mer information och ett exempel på en startkonfiguration i blogginlägget från Microsoft C++-teamet Felsökning av Linux CMake-projekten med gdbserver
.