Dela via


Distribuera, köra och felsöka ditt Linux MSBuild-projekt

Linux-stöd är tillgängligt i Visual Studio 2017 och senare. Om du vill se dokumentationen för dessa versioner anger du listrutan Version ovanför innehållsförteckningen till Visual Studio 2017 eller Visual Studio 2019.

När du har skapat ett MSBuild-baserat Linux C++-projekt i Visual Studio och du har anslutit till projektet med hjälp av Linux Connection Managerkan du köra och felsöka projektet. Du kompilerar, kör och felsöker koden på fjärrmålet.

Visual Studio 2019 version 16.1 och senare: Du kan rikta in dig på olika Linux-system för felsökning och skapande. Du kan till exempel korskompilera x64 och distribuera till en ARM-enhet när du riktar in dig på IoT-scenarier. Mer information finns i Ange olika datorer för att skapa och felsöka senare i den här artikeln.

Det finns flera sätt att interagera med och felsöka ditt Linux-projekt.

  • Felsöka med traditionella Visual Studio-funktioner, till exempel brytpunkter, titta på fönster och hovra över en variabel. Med de här metoderna kan du felsöka som vanligt för andra projekttyper.

  • Visa utdata från måldatorn i Linux-konsolfönstret. Du kan också använda konsolen för att skicka indata till måldatorn.

Felsöka ditt Linux-projekt

  1. Välj felsökningsläge på egenskapssidan Felsökning.

    GDB används för att felsöka program som körs på Linux. När du felsöker på ett fjärrsystem (inte WSL) kan GDB köras i två olika lägen, som kan väljas från alternativet felsökningsläge i projektets felsökning egenskapssida:

    Skärmbild av dialogrutan Egenskapssidor för Visual Studio Linux-konsolapp med Konfigurationsegenskaper > Felsökning markerat och Felsökningsläge markerat med G D B markerat och markerat i listrutan.

    GDB används för att felsöka program som körs på Linux. GDB kan köras i två olika lägen, som kan väljas från alternativet felsökningsläge i projektets Felsökning egenskapssida:

    Skärmbild av dialogrutan Egenskapssidor för Linux-konsolapp i Visual Studio 2017 med konfigurationsegenskaper > Felsökning valt och felsökningsläge markerat med G D B markerat i listrutan.

    • I gdbserver- läge körs GDB lokalt, vilket ansluter till gdbserver i fjärrsystemet. Om du vill använda detta måste du ange en lokal Windows-sökväg till GDB under Felsökningssökväg i Visual Studio 2022 version 17.6 och senare, eller under GDB Path i Visual Studio 2019 version 16.11 och tidigare. Mer information om var du kan ange sökvägen till GDB för CMake-projekt finns i Ytterligare alternativ som tillåts med gdbserver-konfigurationen (16.7 eller senare).

    • I gdb- läge kör Visual Studio-felsökaren GDB i fjärrsystemet. Det här är ett bättre alternativ om den lokala versionen av GDB inte är kompatibel med den version som är installerad på måldatorn. Det här är det enda läge som Linux-konsolfönstret stöder.

      Anteckning

      Om du inte kan träffa brytpunkter i gdbserver-felsökningsläge kan du prova gdb-läge. gdb måste först installeras på fjärrmålet.

  2. Välj fjärrmålet med verktygsfältet Felsök i Visual Studio.

    När fjärrmålet är tillgängligt visas det med namn eller IP-adress:

    Skärmbild som visar en IP-adress för fjärrmål.

    Om du inte har anslutit till fjärrmålet än visas instruktioner för att använda Linux Connection Manager för att ansluta till fjärrmålet:

    Skärmbild som visar fjärrarkitekturen, som är x64.

  3. Ange en brytpunkt genom att klicka i den vänstra marginalen på en kodrad som du vet kommer att exekveras. En röd punkt visas på kodraden där du anger brytpunkten.

  4. Tryck på F5 (eller Felsök > Starta felsökning) för att starta felsökningen.

    När du börjar felsöka kompileras programmet på fjärrmålet innan det startas. Kompileringsfel visas i fönstret Fellista.

    Om det inte finns några fel startar appen och felsökningsprogrammet pausar vid brytpunkten:

    Skärmbild som visar att appen har nått en brytpunkt.

    Nu kan du interagera med programmet i dess aktuella tillstånd, visa variabler och stega igenom kod genom att trycka på kommandonycklar som F10 eller F11.

  5. Om du vill använda Linux-konsolen för att interagera med din app väljer du Felsöka > Linux-konsolen.

    Skärmbild som visar menyalternativet i Linux-konsolen.

    Den här konsolen visar konsolutdata från måldatorn och tar indata och skickar dem till måldatorn.

    Skärmbild som visar Linux-konsolfönstret.

Konfigurera andra felsökningsalternativ (MSBuild-projekt)

  • Kommandoradsargument kan skickas till det körbara programmet med hjälp av objektet Programargument i projektets Felsökningssidan.

  • Du kan exportera miljövariabeln DISPLAY med hjälp av förstartskommando i projektets Felsökning egenskapssidor. Till exempel: export DISPLAY=:0.0

    Skärmbild som visar egenskapen Programargument i dialogrutan Egenskapssidor.

  • Specifika felsökningsalternativ kan skickas till GDB med hjälp av posten Ytterligare felsökningskommandon. Du kanske till exempel vill ignorera SIGILL-signaler (olagliga instruktioner). Du kan använda kommandot hantera för att uppnå detta genom att lägga till följande i posten Ytterligare felsökningskommandon ovan: handle SIGILL nostop noprint.

  • Ange sökvägen till GDB som används av Visual Studio med hjälp av objektet GDB Path i projektets Felsökning egenskapssida. Den här egenskapen är tillgänglig i Visual Studio 2019 version 16.9 och senare.

Felsöka med Bifoga till process

Egenskapssidan Felsökning för Visual Studio-projekt och Launch.vs.json-inställningarna för CMake-projekt har inställningar som gör att du kan ansluta till en process som körs. Om du behöver mer kontroll utöver vad som anges i dessa inställningar kan du placera en fil med namnet Microsoft.MIEngine.Options.xml i roten på din lösning eller arbetsyta. Här är ett enkelt exempel:

<?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>

AttachOptionsForConnection har de flesta attribut som du kan behöva. Exemplet ovan visar hur du anger en plats för att söka efter fler .so bibliotek. Det underordnade elementet ServerOptions möjliggör anslutning till fjärrprocessen med gdbserver i stället. För att göra det måste du ange en lokal gdb-klient (den som levereras i Visual Studio 2017 visas ovan) och en lokal kopia av binärfilen med symboler. Med elementet SetupCommands kan du skicka kommandon direkt till gdb. Du hittar alla tillgängliga alternativ i schemat LaunchOptions.xsd på GitHub.

Ange olika datorer för att skapa och felsöka i MSBuild-baserade Linux-projekt

Du kan separera fjärrbyggdatorn från fjärrfelsökningsdatorn för både MSBuild-baserade Linux-projekt och CMake-projekt som riktar sig mot en fjärransluten Linux-dator. Du kan till exempel nu korskompilera på x64 och distribuera till en ARM-enhet när du riktar in dig på IoT-scenarier.

Som standard är fjärrfelsökningsdatorn samma som fjärrgenereringsdatorn (Konfigurationsegenskaper>Allmänt>Fjärrbyggmaskin). Om du vill ange en ny fjärrfelsökningsdator högerklickar du på projektet i Solution Explorer och går till Konfigurationsegenskaper>Felsökning>Fjärrfelsökningsdator:

Skärmbild som visar egenskapen för fjärrfelsökningsmaskinen i Linux i dialogrutan Egenskapssidor som visar användarnamn, autentiseringstyp och port.

Den nedrullningsbara menyn för Remote Debug Machine fylls med alla etablerade fjärranslutningar.

Om du vill lägga till en ny fjärranslutning går du till Verktyg>Alternativ>Plattformsoberoende>Anslutningshanterare eller söker efter "Anslutningshanterare" i Snabbstart. Du kan också ange en ny fjärrdistributionskatalog på projektets egenskapssidor (Konfigurationsegenskaper>Allmänt>Fjärrdistributionskatalog).

Som standard distribueras endast de filer som krävs för att felsöka till fjärrfelsökningsdatorn. Du kan använda Solution Explorer för att konfigurera vilka källfiler som distribueras till fjärrfelsökningsdatorn. När du klickar på en källfil visas en förhandsgranskning av dess filegenskaper direkt under Solution Explorer:

Skärmbild som visar egenskaperna för filen main.cpp med egenskapsinnehållet = False markerat.

Egenskapen Content anger om filen ska distribueras till fjärrfelsökningsdatorn. Du kan inaktivera distributionen helt genom att gå till egenskapssidor>Configuration Manager och avmarkera Distribuera för önskad konfiguration.

I vissa fall kan du behöva mer kontroll över projektets distribution. Vissa filer som du vill distribuera kan till exempel ligga utanför din lösning eller så vill du anpassa fjärrdistributionskatalogen per fil eller katalog. I dessa fall lägger du till följande kodblock i din .vcxproj-fil och ersätter "example.cpp" med de faktiska filnamnen:

<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-projekt

För CMake-projekt som riktar in sig på en fjärransluten Linux-dator kan du ange en ny fjärrfelsökningsdator i launch.vs.json. Som standardinställning synkroniseras värdet för "remoteMachineName" med egenskapen "remoteMachineName" i CMakeSettings.json, vilket motsvarar din fjärrbyggmaskin. Dessa egenskaper behöver inte längre matcha och värdet för "remoteMachineName" i launch.vs.json avgör vilken fjärrdator som används för distribution och felsökning.

CMake-fjärrfelsökaren som anges i launch_schema.json-filen. Fjärrdatornamnet är ${debugInfo . remoteMachineName}

IntelliSense föreslår en lista över alla etablerade fjärranslutningar. Du kan lägga till en ny fjärranslutning genom att gå till Tools>Options>Cross Platform>Connection Manager eller söka efter "Anslutningshanteraren" i Snabbstart.

Om du vill ha fullständig kontroll över distributionen kan du lägga till följande kodblock i filen launch.vs.json. Kom ihåg att ersätta platshållarvärdena med verkliga värden:

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

Nästa steg

Se även

C++ Felsökningsegenskaper (Linux C++)