Momentálně jsem zasekl problémem se vzdáleným laděním mé aplikace pomocí gdb. Chtěl bych mít možnost připojení ke vzdálenému procesu a použití vizuálního ladění IDE (používám Visual Studio Code).

problém je, že IDE se může připojit k místnímu procesu pomocí jeho pid, což není opravdu užitečné. Takže pokud požádám o přesměrování místního portu, mohl bych použít místní port k přesměrování připojení, což opět není opravdu to, co chci.

Je možné udělat něco jako „pid-forwarding“, tj. Nastavím nějaké pid který je ve skutečnosti vzdálený proces.

Komentáře

  • Vy ' Neříkám, co IDE používají (a protože nepoužívám žádné IDE, pravděpodobně bych ' nebyl schopen vám pomoci). Měli byste se ale podívat na gdbserver – ten ' je malý program, který by mohl běžet na integrovaném / omezeném systému a můžete se k němu připojit pomocí ' fat debugger ' z výkonnějšího stroje.
  • @UncleBilly. " Používám Visual Studio Code ". Bohužel je zdokumentováno, že nepodporuje vzdálené ladění …
  • @UncleBilly gdbserver zní, jako bych chtěl. Děkuji.

Odpověď

Jako strýček Billy říká, hezký způsob, jak to udělat, je použít možnosti vzdáleného ladění GDB. Funguje to tak, že na hostiteli spustíte „malý“ debugger, na kterém běží proces, který chcete ladit, a připojíte se k němu pomocí gdb z hostitele, na kterém běží vaše vývojové prostředí. Protože mnoho IDE (včetně VS Code) podporuje ladění pomocí gdb, můžete získat pohodlí svého vývojového prostředí zaměřeného na procesy běžící kdekoli, včetně jiných platforem.

Na hostiteli, který spouští proces, který chcete ladit, musíte nainstalovat gdbserver (často zkopírováním statického binárního souboru) a spustit jej; například:

gdbserver --attach :9953 ${pid} 

zobrazí seznam na portu 9953 a připojí se k danému ID procesu. Můžete určit řadu způsobů připojení k serveru (sériové porty, adresy IP …) a buď spustit příkaz k ladění, nebo se připojit ke spuštěnému procesu, nebo dokonce spustit „ladicí server“ bez konkrétního procesu .

Na hostiteli s vývojovým prostředím se připojíte k cíli v rámci gdb:

$ gdb ... (gdb) target remote <IP address>:9953 

Všechno ostatní funguje jako obvykle. gdb přenese potřebné soubory (knihovny atd.) ze vzdáleného cíle, ale pro urychlení můžete namířit na místní kopii souborů. Bude používat místní zdroje.

Funguje to, jak byste očekávali, když jsou dva hostitelé stejní, ale může být také vytvořeno pro práci s různými hostiteli, např. k ladění program Windows ze systému Linux, nebo typičtěji program běžící na malém integrovaném systému z větší vývojové platformy.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *