Delen via


Uw Linux MSBuild-project implementeren, uitvoeren en fouten opsporen

Linux-ondersteuning is beschikbaar in Visual Studio 2017 en hoger. Als u de documentatie voor deze versies wilt bekijken, stelt u de vervolgkeuzelijst versie boven de inhoudsopgave in op Visual Studio 2017- of Visual Studio 2019.

Nadat u een op MSBuild gebaseerd Linux C++-project hebt gemaakt in Visual Studio en u verbinding hebt gemaakt met het project met behulp van de Linux Connection Manager-, kunt u het project uitvoeren en fouten opsporen. U compileert, voert en debugt de code op het externe doel.

Visual Studio 2019 versie 16.1 en hoger: u kunt zich richten op verschillende Linux-systemen voor foutopsporing en -bouwen. U kunt bijvoorbeeld kruislings compileren op x64 en implementeren op een ARM-apparaat bij het richten van IoT-scenario's. Voor meer informatie, zie Verschillende machines specificeren voor het bouwen en debuggen later in dit artikel.

Er zijn verschillende manieren om met uw Linux-project te communiceren en fouten op te sporen.

  • Fouten opsporen met traditionele Visual Studio-functies, zoals onderbrekingspunten, vensters bekijken en de muisaanwijzer over een variabele bewegen. Met behulp van deze methoden kunt u fouten opsporen zoals u normaal gesproken zou doen voor andere projecttypen.

  • Uitvoer van de doelcomputer weergeven in de Linux-console. U kunt de console ook gebruiken om invoer naar de doelcomputer te verzenden.

Fouten opsporen in uw Linux-project

  1. Selecteer de foutopsporingsmodus op de eigenschappenpagina Foutopsporing.

    GDB wordt gebruikt voor het opsporen van fouten in toepassingen die worden uitgevoerd op Linux. Bij foutopsporing op een extern systeem (niet WSL) kan GDB in twee verschillende modi worden uitgevoerd, die kunnen worden geselecteerd vanuit de Debugging-modus optie op de Debugging-eigenschapspagina van het project.

    nl-NL: Schermafbeelding van het Eigenschappenpagina-dialoogvenster van de Linux-console-app van Visual Studio met Configuratie-eigenschappen > Foutopsporing geselecteerd en foutopsporingsmodus gemarkeerd met G D B uit de vervolgkeuzelijst geselecteerd en gemarkeerd.

    GDB wordt gebruikt voor het opsporen van fouten in toepassingen die worden uitgevoerd op Linux. GDB kan worden uitgevoerd in twee verschillende modi, die kunnen worden geselecteerd in de foutopsporingsmodus optie op de eigenschappenpagina van het project Foutopsporing:

    nl-NL: Schermopname van het dialoogvenster Eigenschappenpagina's van de Linux-console-app van Visual Studio 2017 met Configuratie-eigenschappen > Foutopsporing geselecteerd en Foutopsporingsmodus gemarkeerd met G D B geselecteerd en gemarkeerd in de vervolgkeuzelijst.

    • In gdbserver-modus wordt GDB lokaal uitgevoerd, waarmee verbinding wordt gemaakt met gdbserver op het externe systeem. Als u dit wilt gebruiken, moet u een lokaal Windows-pad naar GDB opgeven onder Pad voor foutopsporingsprogramma in Visual Studio 2022 versie 17.6 en hoger, of onder GDB-pad in Visual Studio 2019 versie 16.11 en eerder. Zie Aanvullende opties die zijn toegestaan met de gdbserverconfiguratie (16.7 of hoger)voor meer informatie over waar u het pad naar GDB voor CMake-projecten kunt opgeven.

    • In de gdb--modus wordt GDB op het externe systeem aangestuurd door de Visual Studio-debugger. Dit is een betere optie als de lokale versie van GDB niet compatibel is met de versie die op de doelcomputer is geïnstalleerd. Dit is de enige modus die het Linux-consolevenster ondersteunt.

      Notitie

      Als u geen onderbrekingspunten kunt bereiken in de gdbserver-foutopsporingsmodus, probeert u de gdb-modus. gdb moet eerst worden geïnstalleerd op het externe doel.

  2. Selecteer het externe doel met behulp van de standaardwerkbalk Foutopsporing in Visual Studio.

    Wanneer het externe doel beschikbaar is, ziet u het vermeld op naam of IP-adres:

    schermopname van een IP-adres voor extern doel.

    Als u nog geen verbinding hebt gemaakt met het externe doel, ziet u instructies voor het gebruik van Linux Connection Manager- om verbinding te maken met het externe doel:

    Schermopname van de externe architectuur, x64.

  3. Stel een onderbrekingspunt in door in de linkermarge te klikken van code waarvan u weet dat deze wordt uitgevoerd. Er wordt een rode stip weergegeven op de coderegel waar u het breakpoint instelt.

  4. Druk op F5 (of Debug > Start Debugging) om foutopsporing te starten.

    Wanneer u de foutopsporing start, wordt de toepassing gecompileerd op het externe doel voordat deze wordt gestart. Compilatiefouten worden weergegeven in het venster Foutenlijst.

    Als er geen fouten zijn, wordt de app gestart en wordt het foutopsporingsprogramma onderbroken op het onderbrekingspunt:

    schermopname waarin wordt weergegeven dat de app een onderbrekingspunt heeft bereikt.

    U kunt nu met de toepassing werken in de huidige status, variabelen bekijken en code doorlopen door op opdrachttoetsen zoals F10 of F11te drukken.

  5. Als u de Linux-console wilt gebruiken om te communiceren met uw app, selecteert u Fouten opsporen > Linux-console.

    Schermopname van het menu-item

    Deze console geeft console-uitvoer weer van de doelcomputer en neemt invoer en verzendt deze naar de doelcomputer.

    Schermopname van het Venster Linux-console.

Andere opties voor foutopsporing configureren (MSBuild-projecten)

  • Opdrachtregelargumenten kunnen worden doorgegeven aan het uitvoerbaar bestand via het item Programmaargumenten in de Debugging-eigenschapspagina van het project.

  • U kunt de omgevingsvariabele DISPLAY exporteren met behulp van de Voorstartopdracht in de Foutopsporing eigenschapspagina's van het project. Bijvoorbeeld: export DISPLAY=:0.0

    Schermopname van de eigenschap 'Program Arguments' in het dialoogvenster Eigenschappenpagina's.

  • Specifieke opties voor foutopsporingsprogramma's kunnen worden doorgegeven aan GDB met behulp van de extra foutopsporingsprogrammaopdrachten vermelding. U kunt bijvoorbeeld SIGILL-signalen (illegale instructies) negeren. U kunt de handle opdracht gebruiken om dit te bereiken door het volgende toe te voegen aan de Aanvullende foutopsporingsprogramma-opdrachten hierboven weergegeven: handle SIGILL nostop noprint.

  • Geef het pad op naar de GDB die door Visual Studio wordt gebruikt met het item GDB-pad op de eigenschappenpagina foutopsporing van het project. Deze eigenschap is beschikbaar in Visual Studio 2019 versie 16.9 en hoger.

Debuggen met Koppelen aan Proces

De eigenschappenpagina Foutopsporing voor Visual Studio-projecten en de Launch.vs.json-instellingen voor CMake-projecten hebben instellingen waarmee u verbinding kunt maken met een actief proces. Als u meer controle nodig hebt dan in deze instellingen, kunt u een bestand met de naam Microsoft.MIEngine.Options.xml in de hoofdmap van uw oplossing of werkruimte plaatsen. Hier volgt een eenvoudig voorbeeld:

<?xml version="1.0" encoding="utf-8"?>
<SupplementalLaunchOptions>
    <AttachOptions>
      <AttachOptionsForConnection AdditionalSOLibSearchPath="/home/user/solibs">
        <ServerOptions MIDebuggerPath="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\VC\Linux\bin\gdb\7.9\x86_64-linux-gnu-gdb.exe"
ExePath="C:\temp\ConsoleApplication17\ConsoleApplication17\bin\x64\Debug\ConsoleApplication17.out"/>
        <SetupCommands>
          <Command IgnoreFailures="true">-enable-pretty-printing</Command>
        </SetupCommands>
      </AttachOptionsForConnection>
    </AttachOptions>
</SupplementalLaunchOptions>

De AttachOptionsForConnection- heeft de meeste kenmerken die u mogelijk nodig hebt. In het bovenstaande voorbeeld ziet u hoe u een locatie kunt opgeven om meer .so bibliotheken te zoeken. Het subelement ServerOptions maakt het mogelijk om met gdbserver aan het externe proces te koppelen. Hiervoor moet u een lokale gdb-client opgeven (de client die wordt meegeleverd in Visual Studio 2017 hierboven weergegeven) en een lokale kopie van het binaire bestand met symbolen. Met het element SetupCommands kunt u opdrachten rechtstreeks doorgeven aan gdb. U vindt alle beschikbare opties in het LaunchOptions.xsd-schema op GitHub.

Verschillende machines opgeven voor het bouwen en opsporen van fouten in Op MSBuild gebaseerde Linux-projecten

U kunt uw externe buildmachine scheiden van uw externe foutopsporingsmachine voor zowel OP MSBuild gebaseerde Linux-projecten als CMake-projecten die zijn gericht op een externe Linux-machine. U kunt nu bijvoorbeeld kruislings compileren op x64 en implementeren op een ARM-apparaat bij het richten van IoT-scenario's.

De externe foutopsporingsmachine is standaard hetzelfde als de externe buildcomputer (configuratie-eigenschappen>Algemeen>Remote Build Machine). Als u een nieuwe externe foutopsporingsmachine wilt opgeven, klikt u met de rechtermuisknop op het project in Solution Explorer en gaat u naar Configuratie-eigenschappen>Foutopsporing>externe foutopsporingsmachine:

Schermopname die de eigenschap van de externe Linux-foutopsporingsmachine toont in het dialoogvenster Eigenschappenpagina's, met de gebruikersnaam, het verificatietype en de poort.

De vervolgkeuzelijst voor Remote Debug Machine wordt gevuld met alle tot stand gebrachte externe verbindingen.

Als u een nieuwe externe verbinding wilt toevoegen, gaat u naar Tools>Options>Cross Platform>Connection Manager of zoekt u in Quick Launchnaar 'Connection Manager'. U kunt ook een nieuwe map voor externe implementatie opgeven op de eigenschappenpagina's van het project (configuratie-eigenschappen>Algemeen>Map voor externe implementatie op afstand).

Standaard worden alleen de bestanden die nodig zijn voor het proces voor foutopsporing geïmplementeerd op de externe foutopsporingsmachine. U kunt Solution Explorer gebruiken om te configureren welke bronbestanden worden geïmplementeerd op de externe foutopsporingsmachine. Wanneer u op een bronbestand klikt, ziet u een voorbeeld van de bestandseigenschappen direct onder Solution Explorer:

Schermopname van de eigenschappen van het bestand main.cpp met de eigenschapsinhoud = Onwaar gemarkeerd.

De eigenschap Inhoud geeft aan of het bestand wordt geïmplementeerd op de externe foutopsporingscomputer. U kunt de implementatie volledig uitschakelen door te navigeren naar Eigenschappen>Configuration Manager en het selectievakje Implementeren uitvinken voor de gewenste configuratie.

In sommige gevallen hebt u mogelijk meer controle nodig over de implementatie van uw project. Sommige bestanden die u wilt implementeren, bevinden zich bijvoorbeeld buiten uw oplossing of u wilt de map voor externe implementatie per bestand of map aanpassen. In deze gevallen voegt u de volgende codeblokken toe aan uw .vcxproj-bestand en vervangt u 'example.cpp' door de werkelijke bestandsnamen:

<ItemGroup>
   <RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
      <SourceMachine>$(RemoteTarget)</SourceMachine>
      <TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
      <SourcePath>~/example.cpp</SourcePath>
      <TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
      <DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
      <Executable>true</Executable>
   </RemoteDeploy>
</ItemGroup>

CMake-projecten

Voor CMake-projecten die zijn gericht op een externe Linux-machine, kunt u een nieuwe externe foutopsporingsmachine opgeven in launch.vs.json. Standaard wordt de waarde van "remoteMachineName" gesynchroniseerd met de eigenschap "remoteMachineName" in CMakeSettings.json, die overeenkomt met uw externe buildcomputer. Deze eigenschappen hoeven niet meer overeen te komen en de waarde van "remoteMachineName" in launch.vs.json bepalen welke externe machine wordt gebruikt voor het implementeren en opsporen van fouten.

De externe foutopsporingsmachine van CMake die is opgegeven in het launch_schema.json-bestand. De naam van de externe machine is ${debugInfo . remoteMachineName}

IntelliSense stelt een lijst voor van alle tot stand gebrachte externe verbindingen. U kunt een nieuwe externe verbinding toevoegen door te navigeren naar Tools>Options>Cross Platform>Connection Manager of te zoeken naar 'Connection Manager' in Quick Launch.

Als u de volledige controle over uw implementatie wilt hebben, kunt u de volgende codeblokken toevoegen aan het launch.vs.json-bestand. Vergeet niet om de tijdelijke aanduidingen te vervangen door echte waarden:

"disableDeploy": false,
"deployDirectory": "~\foo",
"deploy" : [
   {
      "sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
      "targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
      "sourcePath": "~/example.cpp",
      "targetPath": "~/example.cpp",
      "executable": "false"
   }
]

Volgende stappen

Zie ook

C++ Foutopsporingseigenschappen (Linux C++)