Sunt „blocat în prezent cu problema de depanare la distanță a aplicației mele cu gdb. Aș dori să am abilitatea de a se atașa la un proces la distanță și de a folosi depanarea vizuală a IDE (folosesc Visual Studio Code).

problema este că IDE se poate atașa la un proces local prin pid care nu este cu adevărat util. Deci, dacă cer redirecționarea portului local, aș putea folosi portul local pentru a redirecționa conexiunea, ceea ce nu este din nou ceea ce vreau.

Este posibil să fac ceva de genul „redirecționare pid”, adică am setat câteva pid care este de fapt un proces la distanță.

Comentarii

  • Tu ' nu vă spun ce IDE utilizează (și întrucât ' nu folosesc niciun IDE, probabil că nu ' aș fi capabil să te ajute). Dar ar trebui să căutați în gdbserver – acel ' un mic program care ar putea rula pe un sistem încorporat / restricționat și vă puteți conecta la acesta cu ' fat debugger ' de la o mașină mai puternică.
  • @UncleBilly am făcut-o. " Eu folosesc Visual Studio Code ". Din păcate, este documentat că nu acceptă depanarea la distanță …
  • @UncleBilly gdbserver pare că este ceea ce am vrut. Mulțumesc.

Răspunde

Ca Unchiul Billy spune, un mod frumos de a face acest lucru este de a utiliza capacitățile GDB de depanare la distanță. Acest lucru funcționează executând un depanator „mic” pe gazda care rulează procesul pe care doriți să-l depanați și conectându-vă la acesta utilizând gdb de la gazda care rulează mediul dvs. de dezvoltare. Întrucât multe IDE (inclusiv codul VS) acceptă depanarea folosind gdb, puteți obține confortul mediului dvs. de dezvoltare orientat către procesele care rulează oriunde, inclusiv pe alte platforme.

Pe gazda care rulează procesul pe care doriți să-l depanați, trebuie să instalați gdbserver (adesea copiind un binar static) și să îl rulați; de exemplu:

gdbserver --attach :9953 ${pid} 

va lista pe portul 9953 și se va atașa la ID-ul procesului dat. Puteți specifica o varietate de moduri de conectare la server (porturi seriale, adrese IP …) și fie executați o comandă pentru depanare, fie atașați la un proces în execuție, sau chiar rulați un „server de depanare” fără un proces specific .

Pe gazdă cu mediul dvs. de dezvoltare, vă conectați la țintă în gdb:

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

Toate celelalte funcționează ca de obicei. gdb va transfera fișierele de care are nevoie (biblioteci etc.) de la ținta de la distanță, dar pentru a accelera lucrurile, îl puteți îndrepta către o copie locală a fișierelor. Va folosi surse locale.

Acest lucru funcționează așa cum v-ați aștepta atunci când cele două gazde sunt aceleași, dar poate fi făcut și să funcționeze cu gazde diferite, de exemplu pentru a depana un program Windows dintr-un sistem Linux sau, mai normal, un program care rulează pe un sistem încorporat mic de pe o platformă de dezvoltare mai mare.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *