Obecnie mam problem ze zdalnym debugowaniem mojej aplikacji z gdb
. Chciałbym, aby możliwość podłączenia się do procesu zdalnego i używania debugowania wizualnego IDE
(używam Visual Studio Code
).
Problem polega na tym, że IDE może łączyć się z procesem lokalnym przez pid
, co nie jest zbyt przydatne. Więc jeśli zażądam przekierowania portu lokalnego, mógłbym użyć lokalnego portu do przekazania połączenia, co znowu nie jest tym, czego chcę.
Czy jest możliwe zrobienie czegoś takiego jak „przekazywanie pid”, tj. Ustawiam jakieś pid
co jest w rzeczywistości procesem zdalnym.
Komentarze
- Ty ' nie mówię, jakiego IDE używam (a ponieważ ' nie używam żadnego IDE, prawdopodobnie nie ' nie będę w stanie Ci pomóc). Ale powinieneś przyjrzeć się gdbserver – że ' jest małym programem, który może działać w systemie osadzonym / ograniczonym, i możesz się z nim połączyć za pomocą ' gruby debugger ' z mocniejszej maszyny.
- @UncleBilly Zrobiłem. " Używam Visual Studio Code ". Niestety zostało udokumentowane, że nie obsługuje zdalnego debugowania …
- @UncleBilly gdbserver brzmi tak, jakby tego chciał. Dzięki.
Odpowiedź
As Wujek Billy mówi, dobrym sposobem na to jest użycie możliwości zdalnego debugowania GDB. Działa to poprzez uruchomienie „małego” debuggera na hoście, na którym działa proces, który chcesz debugować, i połączenie się z nim za pomocą gdb
z hosta, na którym działa środowisko programistyczne. Ponieważ wiele IDE (w tym VS Code) obsługuje debugowanie przy użyciu gdb
, możesz uzyskać komfort środowiska programistycznego ukierunkowanego na procesy działające w dowolnym miejscu, w tym na innych platformach.
Na hoście, na którym działa proces, który chcesz debugować, musisz zainstalować gdbserver
(często kopiując statyczny plik binarny) i uruchomić go; na przykład:
gdbserver --attach :9953 ${pid}
wyświetli listę na porcie 9953 i dołączy do podanego identyfikatora procesu. Możesz określić różne sposoby łączenia się z serwerem (porty szeregowe, adresy IP …) i albo uruchomić polecenie debugowania, albo dołączyć do uruchomionego procesu, a nawet uruchomić „serwer debugowania” bez określonego procesu .
Na hoście ze środowiskiem programistycznym łączysz się z celem w ramach gdb
:
$ gdb ... (gdb) target remote <IP address>:9953
Wszystko inne działa jak zwykle. gdb
prześle potrzebne pliki (biblioteki itp.) ze zdalnego miejsca docelowego, ale aby przyspieszyć działanie, możesz wskazać lokalną kopię plików. Będzie korzystać ze źródeł lokalnych.
Działa to tak, jak można by się spodziewać, gdy dwa hosty są takie same, ale można go również zmusić do pracy z różnymi hostami, np. w celu debugowania program Windows z systemu Linux lub, bardziej typowo, program działający w małym systemie wbudowanym z większej platformy programistycznej.