Jeg sitter for øyeblikket fast med ekstern feilsøking av søknaden min med gdb
. Jeg vil gjerne ha muligheten til å knytte seg til en ekstern prosess og bruke IDE
«s visuelle feilsøking (jeg bruker Visual Studio Code
).
problemet er at IDE kan knytte til en lokal prosess ved å pid
, noe som ikke er veldig nyttig. Så hvis jeg ber om lokal port-videresending, kan jeg bruke den lokale porten til å videresende forbindelsen, som igjen ikke er det jeg vil.
Er det mulig å gjøre noe sånt som «pid-forwarding» dvs. jeg setter noen pid
som egentlig er en ekstern prosess.
Kommentarer
- Du ' forteller ikke hva IDE bruker (og da jeg ' ikke bruker IDE, ville jeg sannsynligvis ikke ' t være i stand til å hjelpe deg). Men du bør se på gdbserver – det ' er et lite program som kan kjøre på et innebygd / behersket system, og du kan koble til det med ' feit feilsøkingsprogram ' fra en kraftigere maskin.
- @UncleBilly gjorde jeg. " Jeg bruker Visual Studio-kode ". Dessverre er det dokumentert at den ikke støtter ekstern feilsøking …
- @UncleBilly gdbserver høres ut som om det er det jeg ønsket. Takk.
Svar
Som Onkel Billy sier, en fin måte å gjøre dette på er å bruke GDBs eksterne feilsøkingsfunksjoner. Dette fungerer ved å kjøre en «liten» feilsøking på verten som kjører prosessen du vil feilsøke, og koble til den ved hjelp av gdb
fra verten som kjører utviklingsmiljøet ditt. Siden mange IDEer (inkludert VS-kode) støtter feilsøking ved hjelp av gdb
, kan du få komforten i utviklingsmiljøet ditt rettet mot prosesser som kjører hvor som helst, inkludert på andre plattformer.
På verten som kjører prosessen du vil feilsøke, må du installere gdbserver
(ofte ved å kopiere en statisk binær), og kjøre den; for eksempel:
gdbserver --attach :9953 ${pid}
vil vises på port 9953 og legges til gitt prosess-id. Du kan spesifisere en rekke måter å koble til serveren (serielle porter, IP-adresser …), og enten kjøre en kommando for feilsøking, eller legge ved en kjørende prosess, eller til og med kjøre en «feilsøkingsserver» uten noen spesifikk prosess .
På verten med utviklingsmiljøet ditt kobler du deg til målet i gdb
:
$ gdb ... (gdb) target remote <IP address>:9953
Alt annet fungerer som vanlig. gdb
vil overføre filer den trenger (biblioteker osv.) fra det eksterne målet, men for å øke hastigheten kan du peke på en lokal kopi av filene. Det vil bruke lokale kilder.
Dette fungerer som du forventer når de to vertene er de samme, men det kan også fås til å fungere med forskjellige verter, f.eks for å feilsøke et Windows-program fra et Linux-system, eller mer typisk, et program som kjører på et lite innebygd system fra en større utviklingsplattform.