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
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:
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:
W trybie gdbserver baza danych GDB jest uruchamiana lokalnie, co łączy się z serwerem gdbserver w systemie zdalnym. Aby to użyć, należy podać lokalną ścieżkę systemu Windows do GDB w Ścieżka debuggera w programie Visual Studio 2022 w wersji 17.6 lub nowszej, a w przypadku Ścieżka GDB w programie Visual Studio 2019 w wersji 16.11 lub starszej. Aby uzyskać więcej informacji o tym, gdzie podać ścieżkę do bazy danych GDB dla projektów CMake, zobacz Dodatkowe opcje dozwolone przy użyciu konfiguracji gdbserver (16.7 lub nowszej).
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.
Wybierz obiekt docelowy zdalny przy użyciu standardowego paska narzędzi Debugowanie w programie Visual Studio.
Gdy zdalny element docelowy jest dostępny, zobaczysz go na liście według nazwy lub adresu IP:
Jeśli jeszcze nie nawiązaliśmy połączenia ze zdalnym obiektem docelowym, zobaczysz instrukcje dotyczące używania Menedżera połączeń systemu Linux do łączenia się ze zdalnym obiektem docelowym:
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.
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 są wyświetlane w oknie listy błędów .
Jeśli nie ma żadnych błędów, aplikacja zostanie uruchomiona, a debuger wstrzymuje się w punkcie 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.
Jeśli chcesz użyć konsoli systemu Linux do interakcji z aplikacją, wybierz pozycję Debuguj > konsolę systemu Linux.
Ta konsola wyświetla dane wyjściowe konsoli z komputera docelowego i pobiera dane wejściowe i wysyła je do komputera docelowego.
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
.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ące do wpisu Dodatkowe polecenia debugera pokazanego powyżej:
handle SIGILL nostop noprint
.Określ ścieżkę do GDB używanego przez program Visual Studio, korzystając z elementu Ścieżka GDB na stronie właściwości projektu w sekcji Debugowanie. 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ę do wyszukania większej liczby bibliotek .so
. 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 (>>zdalne kompilowanie maszyny). Aby określić nową zdalną maszynę debugowania, kliknij prawym przyciskiem myszy na projekt w Eksploratorze rozwiązań i przejdź do Właściwości konfiguracji>Debugowanie>Zdalna maszyna debugowania:
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> 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 (>>zdalne wdrażanie katalogu).
Domyślnie na maszynie zdalnego debugowania są wdrażane tylko pliki niezbędne do debugowania procesu. Aby skonfigurować pliki źródłowe wdrażane na maszynie zdalnego debugowania, można użyć Eksploratora rozwiązań. Po kliknięciu pliku źródłowego zobaczysz podgląd jego właściwości pliku bezpośrednio poniżej Eksploratora rozwiązań:
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 >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
określa, która maszyna zdalna jest używana do wdrażania i debugowania.
Funkcja IntelliSense sugeruje listę wszystkich ustanowionych połączeń zdalnych. Nowe połączenie zdalne można dodać, przechodząc do >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
- Aby debugować urządzenia ARM w systemie Linux, zobacz ten wpis w blogu: Debugowanie osadzonego urządzenia ARM w programie Visual Studio.