Jeg sidder i øjeblikket fast med fjernfejlretningsproblem i min applikation med gdb
. Jeg vil gerne have evne til at knytte sig til en ekstern proces og bruge IDE
“s visuelle fejlretning (jeg bruger Visual Studio Code
).
problemet er, at IDE kan knytte sig til en lokal proces ved hjælp af dens pid
, hvilket ikke er virkelig nyttigt. Så hvis jeg anmoder om lokal portvideresendelse, kunne jeg bruge den lokale port til at videresende forbindelsen, hvilket igen ikke rigtig er det, jeg vil have.
Er det muligt at gøre noget som “pid-forwarding” dvs. jeg indstiller nogle pid
som faktisk er en fjernproces.
Kommentarer
- Du ' fortæller ikke, hvad IDE bruger (og da jeg ' ikke bruger nogen IDE, ville jeg sandsynligvis ikke ' t være i stand til at hjælpe dig). Men du skal se på gdbserver – det ' et lille program, der kan køre på et indlejret / begrænset system, og du kan oprette forbindelse til det med ' fed debugger ' fra en mere kraftfuld maskine.
- @UncleBilly det gjorde jeg. " Jeg bruger Visual Studio-kode ". Desværre er det dokumenteret, at det ikke understøtter fjernfejlretning …
- @UncleBilly gdbserver lyder som om det er det, jeg ønskede. Tak.
Svar
Som Onkel Billy siger, en god måde at gøre dette på er at bruge GDBs eksterne fejlfindingsfunktioner. Dette fungerer ved at køre en “lille” debugger på værten, der kører den proces, du vil debugge, og oprette forbindelse til den ved hjælp af gdb
fra den vært, der kører dit udviklingsmiljø. Da mange IDEer (inklusive VS-kode) understøtter fejlfinding ved hjælp af gdb
, kan du få den komfort i dit udviklingsmiljø, der er målrettet mod processer, der kører overalt, inklusive på andre platforme. > På den vært, der kører den proces, du vil debugge, skal du installere gdbserver
(ofte ved at kopiere en statisk binær) og køre den; for eksempel:
gdbserver --attach :9953 ${pid}
vises på port 9953 og vedhæftes til det givne proces-id. Du kan angive en række forskellige måder at oprette forbindelse til serveren (serielle porte, IP-adresser …) og enten køre en kommando til fejlretning eller vedhæfte til en kørende proces eller endda køre en “fejlretningsserver” uden nogen specifik proces .
På værten med dit udviklingsmiljø opretter du forbindelse til målet inden for gdb
:
$ gdb ... (gdb) target remote <IP address>:9953
Alt andet fungerer som normalt. gdb
overfører filer, den har brug for (biblioteker osv.) fra fjernmålet, men for at fremskynde tingene kan du pege på en lokal kopi af filerne. Det bruger lokale kilder.
Dette fungerer som du forventer, når de to værter er de samme, men det kan også fås til at arbejde med forskellige værter, f.eks for at debugge et Windows-program fra et Linux-system eller mere typisk et program, der kører på et lille integreret system fra en større udviklingsplatform.