Udostępnij za pośrednictwem


Wdrażanie, uruchamianie i debugowanie projektu narzędzia w systemie Linux

Obsługa systemu Linux jest dostępna w programie Visual Studio 2017 lub nowszym. Aby wyświetlić dokumentację tych wersji, ustaw listę rozwijaną Wersja znajdującą się powyżej spisu treści na Visual Studio 2017 lub Visual Studio 2019.

Po utworzeniu projektu C++ opartego na programie MSBuild w programie Visual Studio i nawiązaniu połączenia z projektem przy użyciu Menedżer połączeń systemu Linux możesz uruchomić i debugować projekt. Kompilujesz, wykonujesz i debugujesz kod w zdalnym obiekcie docelowym.

Program Visual Studio 2019 w wersji 16.1 lub nowszej: można kierować do różnych systemów Linux na potrzeby debugowania i kompilowania. Na przykład można kompilować krzyżowo na platformie x64 i wdrażać je na urządzeniu ARM podczas określania wartości docelowych scenariuszy IoT. Aby uzyskać więcej informacji, zobacz Określanie różnych maszyn do kompilowania i debugowania w dalszej części tego artykułu.

Istnieje kilka sposobów interakcji i debugowania projektu systemu Linux.

  • Debugowanie przy użyciu tradycyjnych funkcji programu Visual Studio, takich jak punkty przerwania, okna kontrolne i umieszczanie wskaźnika myszy na zmiennej. Przy użyciu tych metod można debugować tak, jak zwykle w przypadku innych typów projektów.

  • Wyświetl dane wyjściowe z komputera docelowego w oknie Konsola systemu Linux. Możesz również użyć konsoli do wysyłania danych wejściowych na komputer docelowy.

Debugowanie projektu systemu Linux

  1. Wybierz tryb debugowania na stronie właściwości Debugowanie .

    GDB służy do debugowania aplikacji działających w systemie Linux. Podczas debugowania w systemie zdalnym (nie WSL) GDB można uruchomić w dwóch różnych trybach, które można wybrać z opcji Tryb debugowania na stronie właściwości Debugowanie projektu:

    Zrzut ekranu przedstawiający okno dialogowe Strony właściwości aplikacji konsoli systemu Linux programu Visual Studio z wybraną pozycją Debugowanie właściwości > konfiguracji i wyróżnionym trybem debugowania z wybraną pozycją G D B i wyróżnioną z listy rozwijanej.

    GDB służy do debugowania aplikacji działających w systemie Linux. GDB może działać w dwóch różnych trybach, które można wybrać z opcji Tryb debugowania na stronie właściwości Debugowanie projektu:

    Zrzut ekranu przedstawiający okno dialogowe Strony właściwości aplikacji konsoli systemu Linux programu Visual Studio 2017 z wybraną pozycją Debugowanie właściwości > konfiguracji i wyróżnionym trybem debugowania z wybraną pozycją G D B i wyróżnioną z listy rozwijanej.

    • W trybie gdbserver baza danych GDB jest uruchamiana lokalnie, co łączy się z serwerem gdbserver w systemie zdalnym.

    • W trybie gdb debuger programu Visual Studio dyski GDB w systemie zdalnym. Jest to lepsza opcja, jeśli lokalna wersja usługi GDB nie jest zgodna z wersją zainstalowaną na komputerze docelowym. Jest to jedyny tryb obsługiwany przez okno konsoli systemu Linux.

    Uwaga

    Jeśli nie możesz trafić do punktów przerwania w trybie debugowania gdbserver, spróbuj użyć trybu gdb. Najpierw należy zainstalować bazę danych gdb na zdalnym obiekcie docelowym.

  2. Wybierz obiekt docelowy zdalny przy użyciu standardowego paska narzędzi Debugowanie w programie Visual Studio.

    Gdy obiekt docelowy zdalny jest dostępny, zobaczysz ją na liście według nazwy lub adresu IP.

    Zrzut ekranu przedstawiający zdalny docelowy adres IP.

    Jeśli jeszcze nie nawiązaliśmy połączenia ze zdalnym obiektem docelowym, zostanie wyświetlona instrukcja użycia systemu Linux Menedżer połączeń do nawiązania połączenia z zdalnym obiektem docelowym.

    Zrzut ekranu przedstawiający architekturę zdalną, czyli x64.

  3. Ustaw punkt przerwania, klikając w lewym rynnach kodu, który znasz, zostanie wykonany.

    Czerwona kropka pojawia się w wierszu kodu, w którym ustawiono punkt przerwania.

  4. Naciśnij F5 (lub Debuguj > rozpocznij debugowanie), aby rozpocząć debugowanie.

    Po rozpoczęciu debugowania aplikacja jest kompilowana na zdalnym obiekcie docelowym przed jego uruchomieniem. Wszystkie błędy kompilacji zostaną wyświetlone w oknie Lista błędów.

    Jeśli nie ma żadnych błędów, aplikacja zostanie uruchomiona, a debuger wstrzyma się w punkcie przerwania.

    Zrzut ekranu przedstawiający aplikację, która osiągnęła punkt przerwania.

    Teraz możesz wchodzić w interakcje z aplikacją w bieżącym stanie, wyświetlać zmienne i przechodzić przez kod, naciskając poleceń, takie jak F10 lub F11.

  5. Jeśli chcesz użyć konsoli systemu Linux do interakcji z aplikacją, wybierz pozycję Debuguj > konsolę systemu Linux.

    Zrzut ekranu przedstawiający element menu Konsola systemu Linux.

    Ta konsola wyświetli wszystkie dane wyjściowe konsoli z komputera docelowego i pobiera dane wejściowe i wysyła je do komputera docelowego.

    Zrzut ekranu przedstawiający okno konsoli systemu Linux.

Konfigurowanie innych opcji debugowania (projekty MSBuild)

  • Argumenty wiersza polecenia można przekazać do pliku wykonywalnego przy użyciu elementu Argumenty programu na stronie właściwości Debugowanie projektu.

  • Zmienną DISPLAY środowiskową można wyeksportować przy użyciu polecenia przed uruchomieniem na stronach właściwości Debugowanie projektu. Na przykład: export DISPLAY=:0.0.

    Zrzut ekranu przedstawiający właściwość Argumenty programu w oknie dialogowym Strony właściwości.

  • Określone opcje debugera można przekazać do bazy danych GDB przy użyciu wpisu Dodatkowe polecenia debugera. Na przykład możesz zignorować sygnały SIGILL (niedozwolone instrukcje). Aby to osiągnąć, możesz użyć polecenia handle , dodając następujący kod do wpisu Dodatkowe polecenia debugera, jak pokazano powyżej:

    handle SIGILL nostop noprint

  • Ścieżkę do bazy danych GDB używanej przez program Visual Studio można określić przy użyciu elementu ścieżka GDB na stronie właściwości Debugowanie projektu. Ta właściwość jest dostępna w programie Visual Studio 2019 w wersji 16.9 lub nowszej.

Debugowanie za pomocą dołączania do procesu

Strona właściwości Debugowanie dla projektów programu Visual Studio oraz ustawienia Launch.vs.json dla projektów CMake zawierają ustawienia umożliwiające dołączanie do uruchomionego procesu. Jeśli potrzebujesz większej kontroli poza tym, co podano w tych ustawieniach, możesz umieścić plik o nazwie Microsoft.MIEngine.Options.xml w katalogu głównym rozwiązania lub obszaru roboczego. Oto prosty przykład:

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

Element AttachOptionsForConnection ma większość atrybutów, które mogą być potrzebne. W powyższym przykładzie pokazano, jak określić lokalizację wyszukiwania większej liczby bibliotek. Podrzędny element ServerOptions umożliwia dołączanie do zdalnego procesu za pomocą serwera gdbserver. Aby to zrobić, należy określić lokalnego klienta gdb (ten dostarczony w programie Visual Studio 2017 jest pokazany powyżej) i lokalną kopię pliku binarnego z symbolami. Element SetupCommands umożliwia przekazywanie poleceń bezpośrednio do bazy danych gdb. Wszystkie opcje dostępne w schemacie LaunchOptions.xsd można znaleźć w witrynie GitHub.

Określanie różnych maszyn do kompilowania i debugowania w projektach systemu Linux opartych na programie MSBuild

Możesz oddzielić maszynę kompilacji zdalnej od maszyny zdalnego debugowania zarówno dla projektów systemu Linux opartych na programie MSBuild, jak i projektów CMake przeznaczonych dla zdalnej maszyny z systemem Linux. Na przykład można teraz kompilować krzyżowo na platformie x64 i wdrażać je na urządzeniu ARM podczas określania wartości docelowych scenariuszy IoT.

Domyślnie maszyna do zdalnego debugowania jest taka sama jak maszyna kompilacji zdalnej (Właściwości>konfiguracji Ogólne>zdalne kompilowanie maszyny). Aby określić nową zdalną maszynę debugowania, kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań i przejdź do pozycji Właściwości>konfiguracji Debugowanie zdalnej maszyny debugowania>.

Zrzut ekranu przedstawiający właściwość maszyny debugowania zdalnego systemu Linux w oknie dialogowym Strony właściwości, w którym jest wyświetlana nazwa użytkownika, typ uwierzytelniania i port.

Menu rozwijane maszyny zdalnego debugowania jest wypełniane wszystkimi nawiązanymi połączeniami zdalnymi. Aby dodać nowe połączenie zdalne, przejdź do pozycji Narzędzia>Opcje>międzyplatformowe> Menedżer połączeń lub wyszukaj ciąg "Menedżer połączeń" w obszarze Szybkie uruchamianie. Można również określić nowy katalog zdalnego wdrażania na stronach właściwości projektu (Właściwości>konfiguracji Ogólne>zdalne wdrażanie katalogu).

Domyślnie na maszynie zdalnego debugowania zostaną wdrożone tylko pliki niezbędne do debugowania procesu. Za pomocą Eksplorator rozwiązań można skonfigurować pliki źródłowe, które zostaną wdrożone na maszynie debugowania zdalnego. Po kliknięciu pliku źródłowego zobaczysz podgląd jego właściwości pliku bezpośrednio poniżej Eksplorator rozwiązań.

Zrzut ekranu przedstawiający właściwości pliku main.cpp z wyróżnioną zawartością właściwości = Fałsz.

Właściwość Content określa, czy plik zostanie wdrożony na maszynie zdalnego debugowania. Wdrożenie można całkowicie wyłączyć, przechodząc do programu Configuration Manager stron>właściwości i usuwając zaznaczenie pola wyboru Wdróż dla żądanej konfiguracji.

W niektórych przypadkach może być wymagana większa kontrola nad wdrożeniem projektu. Na przykład niektóre pliki, które chcesz wdrożyć, mogą znajdować się poza rozwiązaniem lub chcesz dostosować katalog wdrażania zdalnego dla każdego pliku lub katalogu. W takich przypadkach dołącz następujące bloki kodu do pliku .vcxproj i zastąp ciąg "example.cpp" rzeczywistymi nazwami plików:


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

Projekty platformy CMake

W przypadku projektów CMake przeznaczonych dla zdalnej maszyny z systemem Linux można określić nową zdalną maszynę debugowania w launch.vs.json. Domyślnie wartość "remoteMachineName" jest synchronizowana z właściwością "remoteMachineName" w CMakeSettings.json, która odpowiada maszynie kompilacji zdalnej. Te właściwości nie muszą już być zgodne, a wartość "remoteMachineName" w launch.vs.json będzie określać, która maszyna zdalna jest używana do wdrażania i debugowania.

Zdalna maszyna debugowania narzędzia CMake określona w pliku launch_schema.json. Nazwa maszyny zdalnej to ${debugInfo . remoteMachineName}

Funkcja IntelliSense sugeruje całą listę wszystkich ustanowionych połączeń zdalnych. Nowe połączenie zdalne można dodać, przechodząc do pozycji Narzędzia>Opcje>międzyplatformowe> Menedżer połączeń lub wyszukując frazę "Menedżer połączeń" w obszarze Szybkie uruchamianie.

Jeśli chcesz mieć pełną kontrolę nad wdrożeniem, możesz dołączyć następujące bloki kodu do pliku launch.vs.json. Pamiętaj, aby zastąpić wartości symboli zastępczych rzeczywistymi wartościami:

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

Następne kroki

Zobacz też

Właściwości debugowania języka C++ (Linux C++)