Dela via


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.

Skärmbild av listrutan CMake-startobjekt.

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.

Skärmbild av menyn CMake Targets View.

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.

Skärmbild av felsökningsalternativmenyn För CMake-målvy.

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.

Skärmbild av listrutan CMake Debugger.

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.

Skärmbild av felsökningsmenykommandot Felsöka och starta inställningarna för projektet.

  • 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.

Skärmbild av kommandot Lägg till felsökningskonfiguration på snabbmenyn för 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.

Skärmbild av dialogrutan Välj ett felsökningsprogram.

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 alternativet gdb. Visual Studio 2019 version 16.7 eller senare stöder även gdbserver.
  • 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är program körs. Katalogen måste finnas.
  • gdbpath: Standardvärdet är /usr/bin/gdb. Komplett Unix-sökväg till gdb som används för felsökning. Krävs endast om du använder en anpassad version av gdb.
  • preDebugCommand: Ett Linux-kommando som ska köras omedelbart innan gdbanropas. 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ör gdb.

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är program körs. Katalogen måste finnas.

  • gdbPath: Fullständig Windows-sökväg till den gdb som används för felsökning.

  • gdbserverPath: Standardvärdet är usr/bin/gdbserver. Fullständig Unix-sökväg till gdbserver som används för felsökning.

  • preDebugCommand: Ett Linux-kommando som ska köras omedelbart innan du startar gdbserver. 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 är false. Anger om separationen för build/debug är inaktiverad. När falseä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 och RemoteRemote stöds. LocalRemote innebär att kopiera från det lokala filsystemet till fjärrsystemet som anges av remoteMachineName 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är program 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 och gdb. De flesta element i den här matrisen behöver inte anpassas vid felsökning av CMake-projekt. Undantaget är ${debuggerCommand}, som startar gdb 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 med gdb förskönad utskrift. Ange även showDisplayString när du anger den här egenskapen.

  • showDisplayString: Ett booleskt värde som aktiverar visningssträngen när en visualizerFile anges. Om du anger det här alternativet till true kan det orsaka långsammare prestanda vid felsökning.

  • setupCommands: Ett eller flera gdb kommandon som ska köras för att konfigurera det underliggande felsökningsprogrammet.

  • miDebuggerPath: Den fullständiga sökvägen till gdb. 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 av cppdbg 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.