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
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:
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:
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.
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:
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:
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.
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:
U kunt nu met de toepassing werken in de huidige status, variabelen bekijken en code doorlopen door op opdrachttoetsen zoals F10 of F11te drukken.
Als u de Linux-console wilt gebruiken om te communiceren met uw app, selecteert u Fouten opsporen > Linux-console.
Deze console geeft console-uitvoer weer van de doelcomputer en neemt invoer en verzendt deze naar de doelcomputer.
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
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:
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:
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.
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
- Als u fouten wilt opsporen in ARM-apparaten in Linux, raadpleegt u dit blogbericht: Fouten opsporen in een ingesloten ARM-apparaat in Visual Studio.