Megosztás a következőn keresztül:


Linux MSBuild-projekt üzembe helyezése, futtatása és hibakeresése

A Linux-támogatás a Visual Studio 2017-ben és újabb verzióiban érhető el. A verziók dokumentációjának megtekintéséhez állítsa a tartalomjegyzék fölött található Verzió legördülő menüt Visual Studio 2017 vagy Visual Studio 2019.

Miután létrehozott egy MSBuild-alapú Linux C++ projektet a Visual Studióban, és a Linux Connection Managerhasználatával csatlakozott a projekthez, futtathatja és hibakereséssel végezheti el a projektet. Lefordítja, végrehajtja és hibakeresi a kódot a távoli célponton.

Visual Studio 2019 16.1-es és újabb verziójának: Különböző Linux-rendszereket célozhat meg a hibakereséshez és az építéshez. Például keresztfordítást végezhet x64-en és egy ARM-eszközön helyezheti üzembe, amikor IoT-forgatókönyveket céloz meg. További információért lásd a jelen cikk későbbi részében a különböző gépek megadásáról építéshez és hibakereséshez szóló részt.

A Linux-projekttel többféleképpen is kommunikálhat és hibakeresést végezhet.

  • Hibakeresés hagyományos Visual Studio-funkciókkal, például töréspontok, ablaknézés és rámutatás egy változóra. Ezekkel a módszerekkel ugyanúgy végezhet hibakeresést, mint más projekttípusok esetében.

  • A célszámítógép kimenetének megtekintése a Linux konzolablakban. A konzol használatával bemenetet is küldhet a célszámítógépre.

Linux-projekt hibakeresése

  1. Válassza a hibakeresési módot a Hibakeresés tulajdonságlapon.

    A GDB a Linuxon futó alkalmazások hibakeresésére szolgál. Távoli rendszeren (nem WSL-en) végzett hibakeresés esetén a GDB két különböző módban futtatható, amelyek a projekt hibakeresési tulajdonságlapjának Hibakeresési mód lehetőségéből választhatók ki:

    Képernyőkép a Visual Studio Linux konzolalkalmazás Tulajdonságok lapjai párbeszédpanelről, ahol a Konfigurációs tulajdonságok alatt a > Hibakeresés van kiválasztva és a Hibakeresési mód van kiemelve, a legördülő listában pedig a G D B van kijelölve és kiemelve.

    A GDB a Linuxon futó alkalmazások hibakeresésére szolgál. A GDB két különböző módban futtatható, amelyeket a projekt Hibakeresési tulajdonságlapjának Hibakeresési mód beállításából lehet kiválasztani:

    Képernyőkép a Visual Studio 2017 Linux konzolalkalmazás tulajdonságainak lapjai párbeszédpanelről, amelyen a Konfiguráció tulajdonságai > A kijelölt hibakeresés és a Hibakeresés mód ki van emelve, a G D B ki van jelölve és kiemelve a legördülő listából.

    • gdbserver módban a GDB helyileg fut, amely a távoli rendszeren található gdbserverhez csatlakozik. Ennek használatához meg kell adnia egy helyi Windows-elérési utat a GDB-hez Hibakereső elérési útjánakVisual Studio 2022 17.6-os és újabb verziójában, vagy a GDB Path alatt Visual Studio 2019 16.11-es és korábbi verziójában és korábbi verzióiban. További információért arról, hogy hol adható meg a CMake-projektekhez készült GDB elérési útja, lásd a gdbserver konfigurációval (16.7 vagy újabb) engedélyezett további lehetőségeket.

    • gdb módban a Visual Studio hibakeresője a GDB-t a távoli rendszeren hajtja. Ez jobb megoldás, ha a GDB helyi verziója nem kompatibilis a célszámítógépen telepített verzióval. Ez az egyetlen mód, amelyet a Linux konzolablak támogat.

      Jegyzet

      Ha a gdbserver hibakeresési módban nem talál töréspontokat, próbálkozzon gdb módban. A gdb-t először kell telepíteni a távoli eszközre.

  2. Válassza ki a távoli célt a Visual Studio standard Hibakeresési eszköztárával.

    Ha a távoli cél elérhető, megjelenik név vagy IP-cím szerint:

    Távoli cél IP-címét ábrázoló képernyőkép.

    Ha még nem csatlakozott a távoli célhoz, útmutatást lát arra, hogy hogyan használja a Linux Connection Managert a távoli célhoz való csatlakozáshoz.

    Képernyőkép a távoli architektúráról, amely x64.

  3. Állítson be egy töréspontot úgy, hogy egy olyan kód bal szélére kattint, amelyről tudja, hogy futni fog. Piros pont jelenik meg azon a kódsoron, ahol a töréspontot állítja be.

  4. Nyomja le F5 (vagy Hibakeresés > Hibakeresés indítása) billentyűkombinációt a hibakeresés megkezdéséhez.

    A hibakeresés megkezdésekor az alkalmazást a távoli célon fordítják le, mielőtt elindul. A fordítási hibák megjelennek a Hibalista ablakban.

    Ha nincsenek hibák, az alkalmazás elindul, és a hibakereső a töréspontnál szünetel:

    Képernyőkép arról, hogy az alkalmazás elérte a töréspontot.

    Most már használhatja az alkalmazást az aktuális állapotában, megtekintheti a változókat, és lépegethet a kódon olyan parancsbillentyűk lenyomásával, mint F10 vagy F11.

  5. Ha a Linux-konzolt szeretné használni az alkalmazás használatához, válassza Hibakeresés > Linux-konzollehetőséget.

    Képernyőkép a Linux-konzol menüelemről.

    Ez a konzol megjeleníti a konzol kimenetét a célszámítógépről, és felveszi a bemenetet, és elküldi a célszámítógépnek.

    Képernyőkép a Linux-konzol ablakról.

Egyéb hibakeresési beállítások konfigurálása (MSBuild-projektek)

  • A parancssori argumentumok a projekt Hibakeresés tulajdonságlapjának Programargumentumok elemével továbbíthatók a végrehajthatónak.

  • A DISPLAY környezeti változót a projekt hibakeresési tulajdonságlapjain található Indítás előtti parancs használatával exportálhatja. Például: export DISPLAY=:0.0

    Képernyőkép a Programargumentumok tulajdonságról a Tulajdonságlapok párbeszédpanelen.

  • Bizonyos hibakeresői beállítások a További hibakereső parancsok bejegyzés használatával továbbíthatók a GDB-nek. Előfordulhat például, hogy figyelmen kívül szeretné hagyni a SIGILL (illegális utasítás) jeleket. Ehhez használhatja a kezelő parancsot, ha hozzáadja a következőt a További hibakereső parancsok fent látható bejegyzéshez: handle SIGILL nostop noprint.

  • Adja meg a Visual Studio által használt GDB elérési útját a projekt hibakeresési tulajdonságlapjának GDB-elérési út elemével. Ez a tulajdonság a Visual Studio 2019 16.9-es és újabb verziójában érhető el.

Hibakeresés a folyamathoz csatolással

A Hibakeresés tulajdonságlapja Visual Studio-projektekhez, valamint a CMake-projektek Launch.vs.json beállításai olyan beállításokkal rendelkeznek, amelyek lehetővé teszik a futó folyamathoz való csatolást. Ha a beállításokban megadottakon túl további vezérlésre van szüksége, elhelyezhet egy Microsoft.MIEngine.Options.xml nevű fájlt a megoldás vagy a munkaterület gyökerében. Íme egy egyszerű példa:

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

Az AttachOptionsForConnection rendelkezik a szükséges attribútumok többségét. A fenti példa bemutatja, hogyan adhat meg egy helyet, ahol további .so tárakat kereshet. A ServerOptions gyermekeleme lehetővé teszi a gdbserver használatával történő csatolást a távoli folyamathoz. Ehhez meg kell adnia egy helyi gdb-klienst (amelyet a fenti példában láthat), valamint egy szimbólumokat tartalmazó helyi bináris példányt. A SetupCommands elem lehetővé teszi a parancsok közvetlen átadását a gdb-nek. A GitHubon található LaunchOptions.xsd séma minden lehetőséget megtalál.

Különböző gépek megadása MSBuild-alapú Linux-projektekben való építkezéshez és hibakereséshez

A távoli buildelési gépet elkülönítheti a távoli hibakereső géptől az MSBuild-alapú Linux-projektek és a távoli Linux-gépeket célzó CMake-projektek esetében is. Mostantól például az x64-en keresztkompilálhat, és IoT-forgatókönyvekhez üzembe helyezhet egy ARM-eszközre.

Alapértelmezés szerint a távoli hibakeresési gép megegyezik a távoli buildelési géppel (Konfiguráció tulajdonságai>Általános>Távoli buildelési gép). Új távoli hibakeresési gép megadásához kattintson a jobb gombbal a projektre Megoldáskezelő, és válassza konfigurációs tulajdonságokat>hibakeresési>távoli hibakeresési gép:

Képernyőkép a Linux távoli hibakeresési gép tulajdonságról a Tulajdonságlapok párbeszédpanelen, amely a felhasználónevet, a hitelesítési típust és a portot jeleníti meg.

A távoli hibakeresési gép legördülő menüje az összes létrehozott távoli kapcsolatot tartalmazza.

Új távoli kapcsolat hozzáadásához lépjen a Eszközök>Beállítások>Platformközi>Kapcsolatkezelő vagy keressen a "Kapcsolatkezelő" kifejezésre a Gyorsindításalatt. Új távoli üzembe helyezési könyvtárat is megadhat a projekt tulajdonságlapjain (Konfiguráció tulajdonságai>Általános>Távoli üzembe helyezési címtár).

Alapértelmezés szerint csak a hibakeresési folyamathoz szükséges fájlok lesznek üzembe helyezve a távoli hibakereső gépen. A Megoldáskezelő használatával konfigurálhatja, hogy mely forrásfájlok legyenek üzembe helyezve a távoli hibakereső gépen. Amikor egy forrásfájlra kattint, a fájltulajdonságok előnézete közvetlenül a Megoldáskezelő alatt jelenik meg:

A main.cpp fájl tulajdonságait bemutató képernyőkép, ahol a tulajdonság tartalma ki van emelve: False.

A Content tulajdonság határozza meg, hogy a fájl üzembe lesz-e helyezve a távoli hibakereső gépen. Az üzembe helyezés teljes letiltásához navigáljon Tulajdonságlapokra>Configuration Manager, és törölje üzembe helyezésének jelölését a kívánt konfigurációhoz.

Bizonyos esetekben előfordulhat, hogy nagyobb ellenőrzést igényel a projekt üzembe helyezése felett. Előfordulhat például, hogy az üzembe helyezni kívánt fájlok némelyike kívül esik a megoldáson, vagy fájlonként vagy könyvtáronként testre szeretné szabni a távoli üzembe helyezési könyvtárat. Ezekben az esetekben fűzze hozzá a következő kódblokkokat a .vcxproj fájlhoz, és cserélje le a "example.cpp" kifejezést a tényleges fájlnevekre:

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

CMake-projektek esetén, amelyek egy távoli Linux-gépet céloznak meg, megadhat egy új távoli hibakeresési gépet a launch.vs.json-ban. Alapértelmezés szerint a "remoteMachineName" értéke szinkronizálva van a távoli buildelési gépnek megfelelő "remoteMachineName"CMakeSettings.json tulajdonságával. Ezeknek a tulajdonságoknak már nem kell egyezniük, és a "remoteMachineName"launch.vs.json értéke határozza meg, hogy melyik távoli gépet használja a rendszer a telepítéshez és a hibakereséshez.

A launch_schema.json fájlban megadott CMake távoli hibakeresési gép. A távoli gép neve ${debugInfo . remoteMachineName}

Az IntelliSense az összes létrehozott távoli kapcsolat listáját javasolja. Új távoli kapcsolatot adhat hozzá úgy, hogy a Eszközök>Beállítások>Platformfüggetlen>Kapcsolatkezelő menübe navigál, vagy a Gyorsindításkeresőbe beírja a "Kapcsolatkezelő" kifejezést.

Ha teljes körű ellenőrzést szeretne végezni az üzembe helyezés felett, a következő kódblokk(ok) hozzáfűzhetők a launch.vs.json fájlhoz. Ne felejtse el a helyőrző értékeket valós értékekre cserélni:

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

Következő lépések

Lásd még:

C++ hibakeresési tulajdonságok (Linux C++)