Delen via


CMake-foutopsporingssessies configureren

Native CMake-ondersteuning is beschikbaar in Visual Studio 2017 en hoger. Als u de documentatie voor deze versies wilt bekijken, stelt u het besturingselement Visual Studio Version selector voor dit artikel in op Visual Studio 2017 of hoger. Deze bevindt zich boven aan de inhoudsopgave op deze pagina.

Alle uitvoerbare CMake-doelen worden weergegeven in de opstartitem vervolgkeuzelijst op de werkbalk. Selecteer er een om een foutopsporingssessie te starten en het foutopsporingsprogramma te starten.

Schermopname van het dropdownmenu CMake-opstart-items.

De vervolgkeuzelijst bevat een lijst met foutopsporingsdoelen waaruit u kunt kiezen. Het geselecteerde item wordt weergegeven als een afspeelknop, gevolgd door de naam van het geselecteerde doel voor foutopsporing dat moet worden uitgevoerd. In dit voorbeeld is het geselecteerde doel voor foutopsporing Hallo wereld .exe.

U kunt ook een foutopsporingssessie starten vanuit Solution Explorer. Schakel eerst over naar CMake Targets View in het Solution Explorer venster.

Schermopname van het menu CMake Targets View.

De Solution Explorer wordt weergegeven. Een klik met de rechtermuisknop op een item in de mapweergave heeft een menu geopend met opties zoals Openen, Openen met, Vergelijken met, enzovoort. Het menu-item Overschakelen naar doelenweergave is gemarkeerd.

Klik vervolgens met de rechtermuisknop op een uitvoerbaar bestand en selecteer Foutopsporing. Met deze opdracht wordt automatisch de foutopsporing van het geselecteerde doel gestart op basis van uw actieve configuratie.

Schermopname van het menu foutopsporingsoptie CMake Targets View.

Een klik met de rechtermuisknop op een doel in de weergave CMake Targets heeft een menu geopend met opties zoals Instellen als opstartitem, Bouwen, Alles opschonen, enzovoort. De menuoptie Debuggen is gemarkeerd.

Vanaf Visual Studio 2022 versie 17.6 kunt u ook een foutopsporingssessie starten in uw CMakeLists.txt-bestand. Hiervoor stelt u een onderbrekingspunt in uw CMakeLists.txt-bestand in en voert u Project configureren met de CMake Debugger uit vanuit het vervolgkeuzemenu Project.

Schermopname van het CMake Debugger dropdownmenu.

De vervolgkeuzelijst Project wordt weergegeven. De menuoptie voor het configureren van Project met CMake-foutopsporingsprogramma is gemarkeerd.

Instellingen voor foutopsporingsprogramma aanpassen

U kunt de instellingen voor het foutopsporingsprogramma aanpassen voor elk uitvoerbaar CMake-doel in uw project. Deze bevinden zich in een configuratiebestand met de naam launch.vs.jsonin een .vs map in de hoofdmap van uw project. Een opstartconfiguratiebestand is handig in de meeste scenario's voor foutopsporing, omdat u de configuratiedetails voor foutopsporing kunt configureren en opslaan. Er zijn drie toegangspunten voor dit bestand:

  • menu Foutopsporing: Selecteer Foutopsporing > Instellingen voor foutopsporing en startinstellingen voor ${activeDebugTarget} in het hoofdmenu om de configuratie voor foutopsporing aan te passen die specifiek is voor uw actieve foutopsporingsdoel. Als u geen doel voor foutopsporing hebt geselecteerd, wordt deze optie grijs weergegeven.

Schermopname van de menuopdracht Foutopsporing en startinstellingen voor het project.

  • doelenweergave: navigeer naar doelenweergave in Solution Explorer. Klik vervolgens met de rechtermuisknop op een foutopsporingsdoel en selecteer Configuratie voor foutopsporing toevoegen om de configuratie voor foutopsporing aan te passen die specifiek is voor het geselecteerde doel.

Screenshot van de opdracht Foutopsporingsconfiguratie toevoegen in het snelmenu voor het doel.

  • Root CMakeLists.txt: Klik met de rechtermuisknop op een root CMakeLists.txt en selecteer Debugconfiguratie toevoegen om het dialoogvenster Een debugger selecteren te openen. In het dialoogvenster kunt u elk type foutopsporingsconfiguratie toevoegen, maar u moet handmatig het CMake-doel opgeven dat moet worden aangeroepen via de eigenschap projectTarget.

Schermafbeelding van het dialoogvenster Een debugger selecteren.

U kunt het launch.vs.json-bestand bewerken om foutopsporingsconfiguraties te maken voor een willekeurig aantal CMake-doelen. Wanneer u het bestand opslaat, maakt Visual Studio een vermelding voor elke nieuwe configuratie in de vervolgkeuzelijst opstartitem.

Referentiesleutels in CMakeSettings.json

Als u in launch.vs.jsonnaar een sleutel in een CMakeSettings.json-bestand wilt verwijzen, moet u cmake. ervoor toevoegen. In het volgende voorbeeld ziet u een eenvoudig launch.vs.json bestand dat de waarde van de remoteCopySources sleutel in het CMakeSettings.json-bestand ophaalt voor de momenteel geselecteerde configuratie:

{
  "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}"]
    }
  ]
}

omgevingsvariabelen gedefinieerd in CMakeSettings.json kunnen ook worden gebruikt in launch.vs.json met behulp van de syntaxis ${env.VARIABLE_NAME}. In Visual Studio 2019 versie 16.4 en hoger worden foutopsporingsdoelen automatisch gestart met behulp van de omgeving die u opgeeft in CMakeSettings.json. U kunt een omgevingsvariabele opheffen door deze in te stellen op null-.

Launch.vs.json verwijzing

Er zijn veel launch.vs.json eigenschappen ter ondersteuning van al uw foutopsporingsscenario's. De volgende eigenschappen zijn gebruikelijk voor alle configuraties voor foutopsporing, zowel extern als lokaal:

  • projectTarget: hiermee geeft u het CMake-doel op dat moet worden aangeroepen bij het bouwen van het project. Deze eigenschap wordt automatisch ingevuld in Visual Studio als u launch.vs.json invoert vanuit het menu Foutopsporing of Doelenweergave. Deze waarde moet overeenkomen met de naam van een bestaand debugdoel dat wordt vermeld in de opstartitem vervolgkeuzelijst.

  • env: Aanvullende omgevingsvariabelen die u wilt toevoegen met behulp van de syntaxis:

    "env": {
          "DEBUG_LOGGING_LEVEL": "trace;info",
          "ENABLE_TRACING": "true"
        }
    
  • args: opdrachtregelargumenten die aan het programma zijn doorgegeven om fouten op te sporen.

Launch.vs.json referentie voor externe projecten en WSL

In Visual Studio 2019 versie 16.6 hebben we een nieuwe foutopsporingsconfiguratie van type: cppgdb toegevoegd om foutopsporing op externe systemen en WSL te vereenvoudigen. Oude foutopsporingsconfiguraties van type: cppdbg worden nog steeds ondersteund.

Configuratietype cppgdb

  • name: Een vriendelijke naam om de configuratie te identificeren in de opstartitem vervolgkeuzelijst .
  • project: hiermee geeft u het relatieve pad naar het projectbestand op. Normaal gesproken hoeft u dit pad niet te wijzigen bij het opsporen van fouten in een CMake-project.
  • projectTarget: hiermee geeft u het CMake-doel op dat moet worden aangeroepen bij het bouwen van het project. Deze eigenschap wordt automatisch ingevuld in Visual Studio als u launch.vs.json invoert vanuit het menu Foutopsporing of Doelenweergave. Deze doelwaarde moet overeenkomen met de naam van een bestaand debugdoel dat wordt vermeld in de Opstartitem vervolgkeuzelijst.
  • debuggerConfiguration: geeft aan welke set standaardwaarden voor foutopsporing moet worden gebruikt. In Visual Studio 2019 versie 16.6 is de enige geldige optie gdb. Visual Studio 2019 versie 16.7 of hoger ondersteunt ook gdbserver.
  • args: opdrachtregelargumenten die zijn doorgegeven tijdens het opstarten aan het programma dat wordt gedebugd.
  • env: aanvullende omgevingsvariabelen die worden doorgegeven aan het programma dat wordt opgespoord. Bijvoorbeeld {"DISPLAY": "0.0"}.
  • processID: Linux-proces-id waaraan moet worden gekoppeld. Alleen gebruikt bij het koppelen aan een extern proces. Zie Problemen met het koppelen van processen oplossen met GDB-voor meer informatie.

Aanvullende opties voor de configuratie van gdb

  • program: standaard ingesteld op "${debugInfo.fullTargetPath}". Het Unix-pad naar de toepassing voor foutopsporing. Alleen vereist indien anders dan het uitvoerbare doelbestand in de build- of implementatielocatie.
  • remoteMachineName: standaard ingesteld op "${debugInfo.remoteMachineName}". Naam van het externe systeem dat als host fungeert voor het programma voor foutopsporing. Alleen vereist indien anders dan het buildsysteem. Moet een bestaande vermelding hebben in de Verbindingsmanager. Druk op Ctrl+spatiebalk om een lijst met alle bestaande externe verbindingen weer te geven.
  • cwd: standaard ingesteld op "${debugInfo.defaultWorkingDirectory}". Het Unix-pad naar de map op het externe systeem waarop program wordt uitgevoerd. De map moet bestaan.
  • gdbpath: standaard ingesteld op /usr/bin/gdb. Volledig Unix-pad naar gdb gebruikt voor debuggen. Alleen vereist als u een aangepaste versie van gdbgebruikt.
  • preDebugCommand: een Linux-opdracht die onmiddellijk moet worden uitgevoerd voordat u gdbaanroept. gdb wordt pas gestart als de opdracht is voltooid. U kunt de optie gebruiken om een script uit te voeren voordat gdbwordt uitgevoerd.

Aanvullende opties die zijn toegestaan met de gdbserver-configuratie (16.7 of hoger)

  • program: standaard ingesteld op "${debugInfo.fullTargetPath}". Het Unix-pad naar de toepassing om fouten op te sporen. Alleen vereist indien anders dan het uitvoerbare doelbestand in de build- of implementatielocatie.

    Tip

    Uitrollen wordt nog niet ondersteund voor lokale cross-compilatie scenario's. Als u meerdere compilaties in Windows gebruikt (bijvoorbeeld met behulp van een cross-compiler in Windows om een uitvoerbaar Linux ARM-bestand te maken), moet u het binaire bestand handmatig kopiëren naar de locatie die is opgegeven door program op de externe ARM-machine voordat u fouten opspoort.

  • remoteMachineName: standaard ingesteld op "${debugInfo.remoteMachineName}". Naam van het externe systeem dat als host fungeert voor het programma voor foutopsporing. Alleen vereist indien anders dan het build-systeem. Moet een bestaande vermelding hebben in de Verbindingsbeheer-. Druk op Ctrl+spatiebalk om een lijst met alle bestaande externe verbindingen weer te geven.

  • cwd: standaard ingesteld op "${debugInfo.defaultWorkingDirectory}". Volledig Unix-pad naar de map op het externe systeem waarop program wordt uitgevoerd. De directory moet bestaan.

  • gdbPath: volledig Windows-pad naar de gdb gebruikt voor foutopsporing.

  • gdbserverPath: standaard ingesteld op usr/bin/gdbserver. Volledig Unix-pad naar de gdbserver gebruikt voor foutopsporing.

  • preDebugCommand: een Linux-opdracht die onmiddellijk moet worden uitgevoerd voordat u gdbserverstart. gdbserver wordt pas gestart als de opdracht is voltooid.

Implementatieopties

Gebruik de volgende opties om uw buildcomputer (gedefinieerd in CMakeSettings.json) te scheiden van uw externe foutopsporingsmachine.

  • remoteMachineName: externe foutopsporingsmachine. Alleen vereist als het anders is dan de build-machine. Moet een bestaande vermelding hebben in de Verbindingsbeheer-. Druk op Ctrl+spatiebalk om een lijst met alle bestaande externe verbindingen weer te geven.
  • disableDeploy: standaard ingesteld op false. Geeft aan of de scheiding van build/foutopsporing is uitgeschakeld. Wanneer false, kan met deze optie build en foutopsporing worden uitgevoerd op twee afzonderlijke computers.
  • deployDirectory: volledig Unix-pad naar de map op remoteMachineName waarnaar het uitvoerbare bestand wordt gekopieerd.
  • deploy: een matrix met geavanceerde implementatie-instellingen. U hoeft deze instellingen alleen te configureren wanneer u meer gedetailleerde controle wilt over het implementatieproces. Standaard worden alleen de bestanden die nodig zijn voor het proces voor foutopsporing geïmplementeerd op de externe foutopsporingsmachine.
    • sourceMachine: de computer waaruit het bestand of de map wordt gekopieerd. Druk op Ctrl+spatiebalk om een lijst weer te geven met alle externe verbindingen die zijn opgeslagen in Verbindingsbeheer. Bij inheems bouwen op WSL wordt deze optie genegeerd.
    • targetMachine: de computer waarnaar het bestand of de map wordt gekopieerd. Druk op Ctrl+spatiebalk om een lijst weer te geven met alle externe verbindingen die zijn opgeslagen in Verbindingsbeheer.
    • sourcePath: de locatie van het bestand of de map op sourceMachine.
    • targetPath: de locatie van het bestand of de map op targetMachine.
    • deploymentType: een beschrijving van het implementatietype. LocalRemote en RemoteRemote worden ondersteund. LocalRemote betekent kopiëren van het lokale bestandssysteem naar het externe systeem dat is opgegeven door remoteMachineName in launch.vs.json. RemoteRemote betekent kopiëren van het externe buildsysteem dat is opgegeven in CMakeSettings.json naar het andere externe systeem dat is opgegeven in launch.vs.json.
    • executable: Geeft aan of het geïmplementeerde bestand een uitvoerbaar bestand is.

Aangepaste gdb-opdrachten uitvoeren

Visual Studio ondersteunt het uitvoeren van aangepaste gdb opdrachten om rechtstreeks met het onderliggende foutopsporingsprogramma te communiceren. Zie Aangepaste gdb lldb-opdrachtenuitvoeren voor meer informatie.

Logboekregistratie inschakelen

Schakel MIEngine-logboekregistratie in om te zien welke opdrachten naar gdbworden verzonden, welke uitvoer gdb retourneert en hoe lang elke opdracht duurt. Meer informatie

Configuratietype cppdbg

De volgende opties kunnen worden gebruikt bij foutopsporing op een extern systeem of WSL met behulp van het configuratietype cppdbg. In Visual Studio 2019 versie 16.6 of hoger wordt het configuratietype cppgdb aanbevolen.

  • name: een vriendelijke naam om de configuratie te identificeren in de Opstartitem vervolgkeuzelijst.

  • project: hiermee geeft u het relatieve pad naar het projectbestand op. Normaal gesproken hoeft u deze waarde niet te wijzigen bij het opsporen van fouten in een CMake-project.

  • projectTarget: hiermee geeft u het CMake-doel op dat moet worden aangeroepen bij het bouwen van het project. Deze eigenschap wordt automatisch ingevuld in Visual Studio als u launch.vs.json invoert vanuit het menu Foutopsporing of Doelenweergave. Deze waarde moet overeenkomen met de naam van een bestaand debugdoel dat wordt vermeld in de opstartitem vervolgkeuzelijst.

  • args: opdrachtregelargumenten die bij het opstarten zijn doorgegeven aan het programma dat wordt gedebugged.

  • processID: Linux-proces-id waaraan moet worden gekoppeld. Alleen gebruikt bij het koppelen aan een extern proces. Zie Problemen met het koppelen van processen oplossen met GDB-voor meer informatie.

  • program: standaard ingesteld op "${debugInfo.fullTargetPath}". Het Unix-pad naar de toepassing voor debugging. Alleen vereist indien anders dan het uitvoerbare doelbestand in de build- of implementatielocatie.

  • remoteMachineName: standaard ingesteld op "${debugInfo.remoteMachineName}". Naam van het externe systeem dat als host fungeert voor het programma voor foutopsporing. Alleen vereist indien het verschilt van het buildsysteem. Moet een bestaande vermelding hebben in de Verbindingsbeheer-. Druk op Ctrl+spatiebalk om een lijst met alle bestaande externe verbindingen weer te geven.

  • cwd: standaard ingesteld op "${debugInfo.defaultWorkingDirectory}". Volledig Unix-pad naar de map op het externe systeem waarop program wordt uitgevoerd. De map moet bestaan.

  • environment: aanvullende omgevingsvariabelen die worden doorgegeven aan het programma dat wordt opgespoord. Bijvoorbeeld

      "environment": [
          {
            "name": "ENV1",
            "value": "envvalue1"
          },
          {
            "name": "ENV2",
            "value": "envvalue2"
          }
        ]
    
  • pipeArgs: Een matrix met opdrachtregelargumenten die worden doorgegeven aan het pipe-programma om de verbinding te configureren. Het pipe-programma wordt gebruikt om standaardinvoer/uitvoer tussen Visual Studio en gdbdoor te sturen. De meeste van deze arrays hoeven niet te worden aangepast bij het debuggen van CMake-projecten. De uitzondering is de ${debuggerCommand}, waarmee gdb op het externe systeem wordt gestart. Deze kan worden gewijzigd in:

    • Exporteer de waarde van de omgevingsvariabele DISPLAY op uw Linux-systeem. In het volgende voorbeeld is deze waarde :1.

      "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "export DISPLAY=:1;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
      
    • Voer een script uit vóór de uitvoering van gdb. Zorg ervoor dat uitvoermachtigingen zijn ingesteld voor uw script.

      "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "/path/to/script.sh;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
      
  • stopOnEntry: Een Booleaanse waarde die aangeeft of het proces moet worden onderbroken zodra het proces wordt gestart. De standaardwaarde is onwaar.

  • visualizerFile: een .natvis-bestand dat moet worden gebruikt bij het opsporen van fouten in dit proces. Deze optie is niet compatibel met gdb opmaak. Stel ook showDisplayString in wanneer u deze eigenschap instelt.

  • showDisplayString: een Booleaanse waarde die de weergavetekenreeks inschakelt wanneer een visualizerFile is opgegeven. Als u deze optie instelt op true kan dit leiden tot tragere prestaties tijdens foutopsporing.

  • setupCommands: een of meer gdb opdrachten die moeten worden uitgevoerd, om het onderliggende foutopsporingsprogramma in te stellen.

  • miDebuggerPath: het volledige pad naar gdb. Wanneer dit niet is opgegeven, zoekt Visual Studio eerst naar PATH voor het foutopsporingsprogramma.

  • Ten slotte kunnen alle implementatieopties die zijn gedefinieerd voor het cppgdb configuratietype ook worden gebruikt door het cppdbg configuratietype.

Fouten opsporen met behulp van gdbserver

U kunt de cppdbg-configuratie configureren om fouten op te sporen met behulp van gdbserver. Meer informatie en een voorbeeldconfiguratie voor het starten vindt u in de Blogpost van het Microsoft C++-team Foutopsporing voor Linux CMake Projects met gdbserver.

Zie ook

CMake-projecten in Visual Studio
Een Linux CMake-project configureren
Verbinding maken met uw externe Linux-computer
CMake-buildinstellingen aanpassen
CMake-foutopsporingssessies configureren
uw Linux-project implementeren, uitvoeren en fouten opsporen
vooraf gedefinieerde configuratiereferentie voor CMake