Al momento sono bloccato con un problema di debug remoto della mia applicazione con gdb
. Vorrei avere il capacità di collegarsi a un processo remoto e utilizzare il debug visivo di IDE
“(io uso Visual Studio Code
).
Il il problema è che lIDE può collegarsi a un processo locale tramite il suo pid
che non è veramente utile. Quindi, se richiedo il port forwarding locale, potrei usare la porta locale per inoltrare la connessione, che ancora una volta non è proprio quello che voglio.
È possibile fare qualcosa come “pid-forwarding” cioè ho impostato alcuni pid
che in realtà è un processo remoto.
Commenti
- Tu ' non sto dicendo quale IDE sta usando (e poiché ' non sto usando alcun IDE, probabilmente non ' in grado di aiutarti). Ma dovresti esaminare gdbserver, che ' è un piccolo programma che potrebbe essere eseguito su un sistema incorporato / limitato e puoi connetterti ad esso con ' fat debugger ' da una macchina più potente.
- @UncleBilly lho fatto. " Utilizzo Visual Studio Code ". Sfortunatamente è documentato che non supporta il debug remoto …
- @UncleBilly gdbserver suona come se fosse quello che volevo. Grazie.
Rispondi
Come Zio Billy dice, un bel modo per farlo è usare le capacità di debug remoto di GDB. Funziona eseguendo un “piccolo” debugger sullhost che esegue il processo di cui si desidera eseguire il debug e connettendosi ad esso utilizzando gdb
dallhost che esegue il proprio ambiente di sviluppo. Poiché molti IDE (incluso VS Code) supportano il debug utilizzando gdb
, puoi ottenere il comfort del tuo ambiente di sviluppo mirato a processi in esecuzione ovunque, anche su altre piattaforme.
Sullhost che esegue il processo di cui desideri eseguire il debug, devi installare gdbserver
(spesso copiando un binario statico) ed eseguirlo; ad esempio:
gdbserver --attach :9953 ${pid}
verrà elencato sulla porta 9953 e si collegherà allid di processo specificato. È possibile specificare una varietà di modi per connettersi al server (porte seriali, indirizzi IP …) ed eseguire un comando per eseguire il debug, o collegarsi a un processo in esecuzione, o persino eseguire un “server di debug” senza un processo specifico .
Sullhost con il tuo ambiente di sviluppo, ti connetti alla destinazione allinterno di gdb
:
$ gdb ... (gdb) target remote <IP address>:9953
Tutto il resto funziona come al solito. gdb
trasferirà i file di cui ha bisogno (librerie, ecc.) dal target remoto, ma per velocizzare le cose puoi puntarlo su una copia locale dei file. Utilizzerà sorgenti locali.
Funziona come ti aspetteresti quando i due host sono uguali, ma può anche essere fatto funzionare con host diversi, ad esempio per eseguire il debug un programma Windows da un sistema Linux, o più tipicamente, un programma in esecuzione su un piccolo sistema embedded da una piattaforma di sviluppo più grande.