Olen tällä hetkellä jumissa sovellukseni gdb -sovelluksen etävianmääritysongelmasta. Haluaisin, että kyky liittää etäprosessiin ja käyttää IDE ”visuaalista virheenkorjausta (käytän Visual Studio Code).

Ongelma on, että IDE voi liittyä paikalliseen prosessiin sen pid avulla, mikä ei ole oikeastaan hyödyllistä. Joten jos pyydän paikallisen portin edelleenlähetystä, voin käyttää paikallista porttia yhteyden välittämiseen, mikä taas ei todellakaan ole sitä, mitä haluan.

Onko mahdollista tehdä jotain ”pid-forwarding” -toimintoa, ts. div id = ”fac3326e75″>

joka on itse asiassa etäprosessi.

Kommentit

  • Sinä ' en kerro, mitä IDE käyttää (ja koska en ' en käytä mitään IDE: tä, en todennäköisesti ' ole auttaa sinua). Mutta sinun tulisi tutkia gdbserver – se ' sa pieni ohjelma, joka voi toimia sulautetussa / pidätetyssä järjestelmässä, ja voit muodostaa yhteyden siihen ' rasvan virheenkorjaus ' tehokkaammasta koneesta.
  • @UncleBilly tein. " Käytän Visual Studio -koodia ". Valitettavasti on dokumentoitu, että se ei tue virheenkorjausta …
  • @UncleBilly gdbserver kuulostaa siltä, mitä halusin. Kiitos.

Vastaa

Kuten Billy-setä sanoo, että mukava tapa tehdä tämä on käyttää GDB: n etävianmääritystoimintoja. Tämä toimii suorittamalla “pieni” virheenkorjaus isännässä, joka suorittaa prosessin, jonka haluat suorittaa virheen, ja muodostamalla yhteyden siihen käyttämällä gdb -ohjelmaa kehitysympäristöä ylläpitävältä isännältä. Koska monet IDE: t (mukaan lukien VS Code) tukevat virheenkorjausta käyttämällä gdb, saat käyttöympäristösi mukavuuden kohdistettuna prosesseihin, jotka kulkevat missä tahansa, myös muilla alustoilla.

Jos isäntä, joka suorittaa virheenkorjauksen, sinun on asennettava gdbserver (usein kopioimalla staattinen binaari) ja suoritettava se; esimerkiksi:

gdbserver --attach :9953 ${pid} 

luetellaan portissa 9953 ja liitetään annettuun prosessitunnukseen. Voit määrittää useita tapoja muodostaa yhteys palvelimeen (sarjaportit, IP-osoitteet …) ja joko suorittaa komento virheenkorjaamiseksi tai liittää käynnissä olevaan prosessiin tai jopa suorittaa ”virheenkorjauspalvelin” ilman erityistä prosessia .

Yhteyden muodostaminen kohdeympäristössä kehitysympäristössäsi kohtaan gdb:

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

Kaikki muu toimii normaalisti. gdb siirtää tarvittavat tiedostot (kirjastot jne.) etäkohteesta, mutta nopeuttamaan asioita voit osoittaa sen tiedostojen paikalliseen kopioon. Se käyttää paikallisia lähteitä.

Tämä toimii odotetusti, kun molemmat isännät ovat samat, mutta se voidaan myös tehdä toimimaan eri isäntien kanssa, esim debugata Windows-ohjelma Linux-järjestelmästä tai tyypillisemmin ohjelma, joka toimii pienellä sulautetulla järjestelmällä isommalta kehitysympäristöstä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *