- gdbserver toimii GDB:n etäagenttina ja ohjaa prosesseja toisella koneella TCP:n tai sarjaportin kautta.
- Etävirheenkorjausta varten on avainasemassa kääntäminen symbolitKäytä sopivaa gdb:tä ja määritä symboli- ja fonttipolut oikein.
- gdbserver tarjoaa yhden prosessin ja moniprosessin tilan ja integroituu myös WinDbg:n ja QEMU:n kanssa ytimen virheenkorjausta varten.
- Asetukset, kuten --debug, sysroot ja arvokokorajoitukset, auttavat ongelmien diagnosoinnissa ja istuntojen vakauttamisessa.
Jos ohjelmoit C- tai C++-kielellä Linux etkä ole koskaan koskenut gdbserveriinSinulta jää käyttämättä yksi hyödyllisimmistä työkaluista prosessien etävianmääritykseen, olipa kyseessä sitten palvelimella, sulautetussa järjestelmässä tai jopa virtuaalikoneessa tai WSL:ssä. Gdbserver ei ole mikään "taika" tai asiantuntijoille varattu ominaisuus, vaan yksinkertaisesti pieni ohjelma, joka kommunikoi gdb:n kanssa ja ohjaa kohdeprosessin suoritusta.
Keskeinen ajatus on hyvin yksinkertainen.koneella, jolla debugattava binääritiedosto on käynnissä ( tavoite) käynnistät gdbserverin työtietokoneellasi ( isäntäKäynnistät gdb:n tai jopa WinDbg:n tukemalla gdb-protokollaa. Molemmat muodostavat yhteyden TCP:n tai sarjaportin kautta, ja sieltä käsin voit asettaa keskeytyspisteitä, tarkastella muuttujia, tarkastella pinoa tai seurata suoritusta askel askeleelta aivan kuin ohjelma toimisi omalla koneellasi.
Mikä on gdbserver ja milloin sitä on järkevää käyttää?

gdbserver on GNU gdb:n etävirheenkorjausagentti.Sen toiminta on hyvin spesifinen: se toimii koneella, jolla analysoitava ohjelma on käynnissä, ohjaa kyseistä prosessia (tai prosesseja) ja kommunikoi toisella koneella (tai samalla) sijaitsevan gdb-asiakasohjelman kanssa etäyhteyden kautta.
Päivittäisessä käytössä gdbserver-palvelinta käytetään kahdessa tyypillisessä tilanteessaSulautetuissa ympäristöissä (reitittimissä, riisutulla Linuxilla varustetuissa emolevyissä, laitteissa) toimiva virheenkorjausohjelmisto IoTjne.) ja debugata prosesseja etäkäyttöisillä Linux-koneilla, joissa ei ole kätevää tai yksinkertaisesti mahdollista käyttää "paksua" gdb:tä, jossa on kaikki kirjastot ja symbolit.
Käytännössä gdbserver hoitaa tehtäviä, kuten Lue ja kirjoita prosessirekistereitä ja muistia, ohjaa suoritusta (jatka, keskeytä, siirry askel kerrallaan), hallitse keskeytyspisteitä ja lähetä kaikki tämä data gdb:hen GDB-etäprotokollan avulla. Tämä filosofia on hyvin samankaltainen kuin työkaluilla, kuten OpenOCD:llä, jotka toimivat siltana gdb:n ja laitteisto ulkoinen, sillä erolla, että gdbserver toimii samassa järjestelmässä, jossa binääritiedosto toimii.
Jos tulet ympäristöistä Windows On myös mielenkiintoista tietää Virheenkorjausohjelmat, kuten WinDbg, voivat kommunikoida gdbserverin kanssa Linuxissa, joten voit debugata käyttäjäprosesseja Linuxissa WinDbg:stä käsin käyttämällä etävirheenkorjaustukea gdb-protokollan kautta, jonka Microsoft on sisällyttänyt uusimpiin versioihin.
Gdb:n ja gdbserverin virheenkorjauksen perusvaatimukset

Ennen kuin aloitat etävirheenkorjauksen, sinun on ymmärrettävä isäntä-kohde-suhde.. tavoite Se on kone, jolla debugattava ohjelma suoritetaan ja jolla gdbserver suoritetaan; isäntä Tämä on kone, josta ajat gdb:tä (tai WinDbg:tä) ja jolla sijaitsevat lähdekoodi ja mieluiten virheenkorjaussymbolit.
Olennainen lähtökohta on kääntää binääritiedosto symboleillaGCC:ssä tai g++:ssa tämä saavutetaan lipulla -gja yleensä on suositeltavaa poistaa myös optimoinnit käytöstä (esimerkiksi -O0Näin debuggeri voi näyttää muuttujat, makrot ja koodirakenteen tarkemmin. Tietyille makroille voit käyttää korkeampia debuggaustasoja, kuten -g3.
Isäntäpuolella tarvitset yhteensopivan gdb-version. kohdearkkitehtuurin kanssa. MIPS-, ARM- tai muun arkkitehtuurin sulautetun järjestelmän virheenkorjaukseen on käytettävä vastaavan työkaluketjun gdb:tä (esimerkiksi) arm-none-eabi-gdb o gdb-multiarch) ja tarvittaessa määritä arkkitehtuuri ja endianisuus käyttämällä komennot kuten set arch y set endian.
Yhteyden osalta gdbserver tukee kahta päätyyppiäSarjaliikenne (hyvin yleinen sulautetuissa laitteissa UARTin kautta) ja TCP/IP, mikä on kätevintä, kun kohde on samassa verkossa tai Linux-kone, johon pääsee verkon kautta. Molemmissa tapauksissa komentoa käytetään gdb:stä. target remote muodostaakseen yhteyden gdbserverin paljastamaan päätepisteeseen.
gdbserverin käynnistämistavat: yhden prosessin ja moniprosessin tila

gdbserver voi toimia kahdella päätavalla Kun puhumme käyttäjätilan virheenkorjauksesta: se liittyy suoraan yksittäiseen prosessiin tai "prosessipalvelimena", joka mahdollistaa eri järjestelmäprosessien listaamisen ja niihin liittämisen.
Yhden prosessin tilassa Käynnistät gdbserverin ja määrität isäntäportin sekä suoritettavan ohjelman. Yksinkertaisessa esimerkissä Linux-työpöytäkoneella voisit tehdä jotain tällaista:
komento: gdbserver localhost:3333 foo
Tuolla komennolla gdbserver käynnistää binääritiedoston. foo ja hän pysyy kuuntelemassa portissa 3333Ohjelma pysyy pysäytettynä, kunnes etä-gdb muodostaa yhteyden; kun gdb muodostaa yhteyden target remote localhost:3333, prosessia alkaa ohjata descrusher.
Moniprosessitilassa (prosessipalvelin) tätä vaihtoehtoa käytetään --multiTässä tapauksessa gdbserver ei käynnistä suoraan mitään ohjelmaa, vaan yksinkertaisesti kuuntelee saapuvia yhteyksiä ja antaa asiakkaan (gdb tai WinDbg) hallita, mihin prosessiin se luo tai liittyy:
komento: gdbserver --multi localhost:1234
Kun työskentelet WinDbg:n kanssa Linuxissa, tämä monitila on erityisen mielenkiintoinen.Koska WinDbg:stä itsestään käsin voit listata etäjärjestelmän prosesseja, nähdä PID:n, käyttäjän ja komentorivin ja liittää sinut kiinnostuneeseen prosessiin samalla tavalla kuin prosessipalvelimella. dbgsrv.exe Windowsissa.
Etävirheenkorjaus gdbserverin ja gdb:n avulla vaihe vaiheelta
Tuodaanpa tämä maanläheisesti hyvin tyypillisellä esimerkillä.: Suorita yksinkertaisen sovelluksen virheenkorjaus samalla koneella (isäntä ja kohde vastaavat toisiaan) käyttämällä gdbserver-palvelinta etätilanteen simuloimiseksi.
Ensin kirjoitat ja käännät pienen ohjelmanEsimerkiksi hölmö silmukka, joka tulostaa laskurin:
komento: gcc -g foo.c -o foo
Avainasia tässä on lippu -gTämä lisää binääritiedostoon tarvittavat virheenkorjaustiedot, jotta gdb voi näyttää koodirivejä, muuttujien nimiä, tyyppejä jne. "Oikeassa" ristiinkääntämisympäristössä tämä käännös tehtäisiin cross-toolchainilla ja sitten kopioitaisiin sekä binääritiedosto että sen riippuvuudet kohteeseen.
Seuraava vaihe on gdbserverin käynnistäminen kohdepalvelimella.Jos isäntä ja kohde ovat sama kone, niin:
komento: gdbserver localhost:3333 foo
Näet viestin, joka on samanlainen kuin ”Prosessi foo luotu; pid = XXXX; Kuuntelee porttia 3333”. Tämä osoittaa, että gdbserver on luonut prosessin ja odottaa gdb:n yhteyden muodostamista. Jos olet järjestelmässä, joka vaatii enemmän käyttöoikeuksia (esimerkiksi järjestelmäprosesseihin liittymiseen), sinun on ehkä suoritettava komento komennolla sudoMutta luvan myöntämisessä on aina viisasta olla varovainen. juuri rikinpoistolaitteeseen.
Isäntäkoneella käynnistät gdb:n määrittämällä paikallisen suoritettavan tiedoston (sama, joka on käynnissä kohteessa, tai identtinen kopio symboleilla):
komento: gdb foo
Kun olet gdb:ssä, muodostat etäyhteyden osoitteeseen:
komento: target remote localhost:3333
Siinä vaiheessa gdb lataa symbolit paikallisesta binääritiedostosta.Se synkronoituu gdbserverin kanssa ja ottaa hallintaansa prosessin, joka todellisuudessa toimii gdbserverin alla. Siitä eteenpäin eteneminen on tavallista: komennot, kuten break asettaa käännekohtia, continue, step, next, print tarkistamaan muuttujia, backtrace nähdä akun tms.
Yhdistäminen käynnissä oleviin prosesseihin gdbserver-palvelimella
Et aina halua käynnistää ohjelmaa tyhjästä.Usein olet kiinnostunut liittymään prosessiin, joka on jo käynnissä (esimerkiksi httpd mukaan reititinjärjestelmädaemon tai tuotantopalvelu).
Tyypillinen kaava on käyttää vaihtoehtoa --attach gdbserveriltävälittämällä kuuntelevan portin ja kohdeprosessin PID:n. Esimerkiksi reitittimessä, jolle olet kopioinut sen arkkitehtuurille käännetyn gdbserver-palvelimen, voit tehdä seuraavaa:
komento: gdbserver localhost:3333 --attach <pid_de_httpd>
Isäntäpuolella käytät gdb:n versiota, joka tukee reitittimen arkkitehtuuria., esimerkiksi gdb-multiarcharkkitehtuurin ja endianisuuden määrittäminen etukäteen:
komento: set arch mips
set endian big
Sitten määrität paikallisen tiedoston, joka sisältää symbolit. etäbinääritiedostosta (esimerkiksi file httpd) ja tarvittaessa kerrot gdb:lle, missä binääritiedosto todellisuudessa suoritetaan kohteessa, käyttämällä set remote exec-file /usr/bin/httpdLopuksi, aivan kuten ennenkin, muodostat yhteyden seuraaviin palveluihin:
komento: target remote 192.168.0.1:3333
Kun se on kiinnitettyVoit asettaa keskeytyskohtia tietyille funktioille (esim. break checkFirmware), jatka suoritusta ja anna ohjelman normaalin kulun (esimerkiksi laiteohjelmiston lataamisen web-käyttöliittymästä) laukaista keskeytyspiste.
gdbserverin käyttö WinDbg:n kanssa Linuxissa
Viime vuosina Microsoft on lisännyt tuen Linux-prosessien virheenkorjaukselle WinDbg:ssä gdbserverin käyttö taustajärjestelmänä. Tämä toiminto on tarkoitettu tilanteisiin, joissa työskentelet Windowsissa, mutta koodi toimii Linuxissa (mukaan lukien WSL).
Tietyn Linux-prosessin virheenkorjaus WinDbg:llä gdbserverin avullaTyönkulku olisi jotakuinkin tällainen: ensin etsit kohdeprosessin Linux-koneelta komennolla, kuten ps -A (esimerkiksi python3 joka on käynnissä), sitten käynnistät gdbserverin kohteessa:
komento: gdbserver localhost:1234 python3
Jos ympäristö sitä vaatii, saatat joutua käyttämään sudo gdbserver ...samoilla turvatoimilla kuin aina. Kun gdbserver ilmoittaa kuuntelevansa porttia 1234, siirry WinDbg:ssä kohtaan Tiedosto / Yhdistä etävirheenkorjaajaan ja määritä seuraavan tyyppinen yhteysmerkkijono:
komento: gdb:server=localhost,port=1234
WinDbg käyttää pientä gdb-protokollaajuria kommunikoidakseen gdbserverin kanssa ja kun yhteys on muodostettu, se pysyy pysähdyksissä kohdassa tavaratila prosessin. Sieltä voit käyttää sen pino-ikkunoita, moduuleja, muistia, keskeytyspisteitä sekä komentoja, kuten k nähdäksesi akun tai lm moduulien listaamiseksi (muistaen, että jotkin komennot odottavat PE-muotoa eivätkä ELF-muotoa, joten ne saattavat näyttää tietyissä tapauksissa outoa tietoa).
gdbserver ja WinDbg-prosessipalvelin
Yhden prosessin tapauksen lisäksi WinDbg voi muodostaa yhteyden prosessipalvelimena toimivaan gdbserveriin. toimimaan samalla tavalla kuin se toimii etä-Windows-prosessien kanssa. Tässä tilassa gdbserver käynnistetään --multi ja ilman siihen liittyvää prosessia:
komento: sudo gdbserver --multi localhost:1234
Valitse WinDbg:stä "Tiedosto / Yhdistä prosessipalvelimeen" ja käytät yhteysmerkkijonoa uudelleen gdb:server=localhost,port=1234Kun yhteys on aktiivinen, voit listata käytettävissä olevat Linux-prosessit ja liittää ne haluamaasi prosessiin tai jopa käynnistää uuden prosessin.
Yksi hienovarainen yksityiskohta on pidettävä mielessä.WinDbg erottaa "prosessipalvelimen" ja "yksittäisen kohteen" sen mukaan, onko gdbserver jo liitetty prosessiin yhteyden muodostamisen yhteydessä. Jos jätit gdbserverin liitettynä prosessiin, suljit WinDbg:n ja yrität muodostaa yhteyden uudelleen, sitä ei ehkä tunnisteta prosessipalvelimena, ja sinun on ehkä käynnistettävä gdbserver uudelleen.
Prosessipalvelinistunnon lopettaminenYleensä riittää, että painat CTRL+D-näppäinyhdistelmää konsolissa, jossa gdbserver on käynnissä, ja pysäytät virheenkorjauksen WinDbg:stä. Joissakin äärimmäisissä tapauksissa, jos synkronoinnissa on ongelmia, voi olla tarpeen sulkea virheenkorjain kokonaan ja käynnistää gdbserver uudelleen alusta.
Symbolien ja lähdekoodien hallinta etävirheenkorjauksessa
Yksi etävirheenkorjauksen kätevyyden avaintekijöistä on symbolien ja fonttien hyvä selvitys.Ilman symboleja pinossa navigointi tai tiettyjen funktioiden keskeytyspisteiden asettaminen on kidutusta.
Klassisissa gdb + gdbserver -skenaarioissa on ihanteellista säilyttää kopio suoritettavasta tiedostosta symboleineen isännässä. (raivaamaton) ja lähdekoodipuu. gdb ei vaadi symboleja etäbinääritiedostosta; riittää, että lataamasi paikallinen tiedosto file vastaa etäsuoritettavaa tiedostoa offset-tasolla.
WinDbg:n ja Linuxin virheenkorjauksen maailmassa on myös syntynyt palveluita, kuten DebugInfoD.jotka paljastavat symboleja ja fontteja HTTP:n kautta. WinDbg voi käyttää erityisiä polkuja, jotka ovat tyyppiä DebugInfoD*https://debuginfod.elfutils.org molemmat .sympath kuten .srcpath ladataksesi DWARF-symboleita ja Linux ELF -binäärien lähdekoodia pyynnöstä.
Eräässä WSL-esimerkissä, jossa käyttäjäkoodi on alla C:\Users\Bob\Voit kertoa WinDbg:lle:
komento: .sympath C:\Users\Bob\
.srcpath C:\Users\Bob\
Ja jos haluat käyttää DebugInfoD:tä myös järjestelmäbinääreille:
komento: .sympath+ DebugInfoD*https://debuginfod.elfutils.org
.srcpath+ DebugInfoD*https://debuginfod.elfutils.org
Tällä kokoonpanolla, kun tarkastelet pinoa tai syötät libc-funktioitaWinDbg saattaa yrittää ladata vastaavat DWARF-symbolit ja, jos palvelin myös paljastaa koodin, näyttää lähdekoodin huomattavan yksityiskohtaisesti, vaikka Windowsin työkaluketju ei sisäisesti käsittele ELF:ää ja DWARF:ia yhtä "natiivisti" kuin PE ja PDB.
Käytännön esimerkki: C++-ohjelman virheenkorjaus gdbserverillä ja WinDbg:llä
Havainnollistava esimerkki on pieni C++-sovellus, joka kirjoittaa tervehdyksen ruudulle., käännettynä WSL:llä virheenkorjaussymboleilla. Kuvittele ohjelma, joka varaa std::array<wchar_t, 50> ja kopioi siihen pidemmän viestin, jolloin teksti katkeaa ja näkyviin tulee merkkejä ???? lopussa
Kääntämisen jälkeen esimerkiksi:
komento: g++ DisplayGreeting.cpp -g -o DisplayGreeting
Käynnistät gdbserverin kyseistä binääriä vasten:
komento: gdbserver localhost:1234 DisplayGreeting
WinDbg:ssä yhdistät merkkijonoon gdb:server=localhost,port=1234 Ja kun istunto on muodostettu ja symboli- ja fonttipolut on määritetty, asetat keskeytyskohdan DisplayGreeting!mainvoit käyttää dx greeting tarkastella paikallista taulukkoa ja nähdä sen koko (50 merkkiä) ja tarkistaa visuaalisesti muistivälilehdeltä tai muuttujanäkymästä, miten tervehdys katkaistaan.
Tämän esimerkin kauneus piilee siinä, että se osoittaa, että vaikka WinDbg ei tue kaikkia ELF/DWARF-muotoja täysinVoit käydä läpi pinoja, tarkastella tyyppejä, asettaa keskeytyspisteitä funktion nimen perusteella ja navigoida C++-koodissa kohtuullisen mukavasti käyttämällä gdbserveriä etäpalvelimena.
Linux-ytimen virheenkorjaus qemu:lla ja gdb:llä
gdbserver-ohjelmaa ei käytetä vain käyttäjätilassa; myös ydintilassa on erittäin tehokkaita skenaarioita.varsinkin kun yhdistät QEMUn virheenkorjaustukeen. Vaikka tässä "gdbserver"-roolin hoitaa QEMUn oma asetus, lähestymistapa on identtinen: toisessa päässä suoritetaan virheenkorjattava järjestelmä ja avataan gdb-portti; toinen pää on joko gdb tai virheenkorjaaja, joka puhuu etäprotokollaa.
Ytimen debugataksesi sinun on käännettävä se tietyillä debugausasetuksilla.: aktivoi virheenkorjaustietojen generointi (CONFIG_DEBUG_INFO), GDB-ytimen skriptit (CONFIG_GDB_SCRIPTS) ja ytimen oma debug-tila (CONFIG_DEBUG_KERNELOn myös tärkeää poistaa käytöstä asetukset, jotka poistavat symboleja linkityksen aikana, kuten "Poista assemblerin luomat symbolit linkityksen aikana".
Kääntämisen jälkeen saat binääritiedoston vmlinux "ei riisuttu"jota käytät gdb:stä. Tarvitset myös perus-initramfs-tiedoston, jonka voit luoda komennolla, kuten:
komento: mkinitramfs -o ramdisk.img
Sitten käynnistät QEMU:n virheenkorjausparametreillaTyypillinen esimerkki sisältää vaihtoehdon -gdb tcp::1234 avataksesi gdb-yhteensopivan etäpäätepisteen ja -S jotta virtuaalikone käynnistyy taukotilassa alusta. Voit myös määrittää ytimen seuraavasti: -kernel vmlinux, -initrd ramdisk.img, muisti, jossa on -m 512 ja yleensä ohjaat konsolin osoitteeseen ttyS0 hallita kaikkea alkaen terminaali.
QEMU pidätettynä odottamassa gdb:täIsäntäkoneelta käynnistät gdb:n osoittamalla kohteeseen vmlinux ja olet yhteydessä target remote localhost:1234Sieltä voit asettaa aikaisia keskeytyskohtia, esimerkiksi hb start_kernelja ohjaa suoritusta komennoilla, kuten c (jatka) ja CTRL+C tauottaaksesi uudelleen.
Viimeaikaiset muutokset ja vivahteet gdb:ssä ja gdbserverissä
Nykyaikaisissa jakeluissa, kuten Red Hat Enterprise Linux 8:ssa, on useita gdb:hen ja gdbserveriin tehtyjä muutoksia, jotka kannattaa pitää mielessä.varsinkin jos käytät aiempia versioita tai sinulla on skriptejä, jotka analysoivat debuggerin tulostetta.
Toisaalta gdbserver käynnistää nyt "alemmat" prosessit komentotulkin avulla.Aivan kuten gdb, tämä sallii muuttujien laajentamisen ja korvaamisen komentorivillä. Jos jostain syystä sinun on poistettava tämä toiminto käytöstä, RHEL 8:ssa on dokumentoitu erityisiä asetuksia edellisen tilan palauttamiseksi.
Useita asioita on myös poistettu tai muutettu: Java-ohjelmien virheenkorjaustuki, jotka on käännetty gcj, HP-UX XDB -yhteensopivuustilassa, komentoja, kuten set remotebaud (korvattu set serial baud) tai yhteensopivuus tietyn vanhemman tiedostomuodon kanssa stabsLisäksi säikeiden numerointi ei ole enää globaalia, vaan "alemman" säikeen mukaan ja näkyy muodossa inferior_num.thread_num, uusilla mukavuusmuuttujilla, kuten $_gthread viitatakseen globaaliin tunnisteeseen.
Toinen merkittävä uusi ominaisuus on säätö max-value-sizeTämä rajoittaa muistin määrää, jonka gdb voi varata arvon sisällön näyttämiseen. Oletusarvo on 64 KiB, joten yritykset tulostaa valtavia taulukoita tai massiivisia rakenteita saattavat johtaa "arvo liian suuri" -varoitukseen kaiken käytettävissä olevan muistin näyttämisen sijaan.
Myös gdb:n tapaa käsitellä on muutettu. sysrootOletusarvo on nyt target:Tämä tarkoittaa, että etäprosessien kohdalla se yrittää ensin löytää kohdejärjestelmän kirjastoja ja symboleja. Jos haluat sen priorisoivan paikallisia symboleja, sinun tulee suorittaa set sysroot sinua kiinnostavalla reitillä ennen kuin teet sen target remote.
Komentohistorian osalta nyt käytetty ympäristömuuttuja on GDBHISTSIZE sijaan HISTSIZENäin voit hienosäätää, kuinka kauan haluat säilyttää virheenkorjausistunnoissa kirjoittamasi komennot häiritsemättä muiden rivinlukukirjastoa käyttävien sovellusten toimintaa.
Työnkulkuvinkkejä ja vianmääritystä gdbserverin avulla
Mukavan työnkulun aikaansaamiseksi on olemassa joitakin malleja, jotka yleensä toimivat erittäin hyvin. Sulautettuihin järjestelmiin tai etäpalvelimille kehitettäessä ensimmäinen askel on automatisoida symbolien kääntäminen ja binääritiedostojen käyttöönotto kohteessa mahdollisimman paljon. Tällä tavoin tiedät aina, mikä suoritettavan tiedoston versio on käynnissä, ja symbolikopio on helposti saatavilla isännässä.
Ympäristöissä, joissa on useita kaatumisytimiä, kannattaa opetella käyttämään gdb:tä eräajotilassa., lippujen kanssa, kuten --batch, --ex y -x käynnistää komentoja automaattisesti ytimien luettelosta ja käsitellä niiden jäljityksiä skripteistä (esimerkiksi PythonNäin voit nopeasti suodattaa pois toistuvat ongelmat, ryhmitellä virheet pinon jäljityksen avulla jne.
Kun etäyhteydessä on ongelmia, vaihtoehto --debug gdbserver on paras ystäväsiJos esimerkiksi käynnistät prosessipalvelimen, jossa on:
komento: gdbserver --debug --multi localhost:1234
gdbserver-konsoli näyttää yksityiskohtaiset jäljet tapahtumista. Etäprotokollatasolla tähän sisältyvät saapuvat paketit, muotoiluvirheet, yhteyden katkaisuongelmat jne. Tämä on erittäin hyödyllistä, kun gdb-palvelimesi yhteys katkeaa yllättäen, prosessi kaatuu heti, kun keskeytyskohta on asetettu, tai virheenkorjauskäyttöliittymäsi lähettää jotain, mitä gdbserver ei ymmärrä.
Konteksteissa, kuten TP-Link-reitittimessä, jossa liität gdbserverin kriittiseen prosessiin, kuten httpdOn suhteellisen yleistä, että tietyt keskeytyskohdat luovat kilpailutilanteita tai valvontamekanismeja, jotka tappavat prosessin, jos se jää "jumiin" liian pitkäksi aikaa debuggeriin. Näissä tilanteissa voi olla tarpeen säätää, mitkä signaalit estetään, mitä säikeitä hallitaan ja tarvittaessa muokata itse järjestelmän kokoonpanoa (aikakatkaisuajat, laitteiston valvontamekanismeja), jotta debuggausistunnot voivat kestää pidempiä.
gdbserverin hyvä käyttö edellyttää useiden osien yhdistämistäKäännä käyttämällä sopivia symboleja, valitse arkkitehtuurille oikea gdb, määritä symboli- ja lähdekoodipolut, ymmärrä gdbserverin kaksi päätilaa (yksiprosessi- ja moniprosessitila) ja älä pelkää käyttää näitä tiloja. --debug kun yhteys ei toimi odotetulla tavalla. Tämän pohjalta etäkäyttöjärjestelmässä, reitittimessä tai virtuaalikoneessa, jossa on tietokoneeltasi mukautettu ydin, suoritettavien sovellusten virheenkorjaus tulee melko rutiininomaiseksi ja ennen kaikkea uskomattoman hyödylliseksi.
Intohimoinen kirjoittaja tavujen maailmasta ja tekniikasta yleensä. Rakastan jakaa tietämykseni kirjoittamalla, ja sen aion tehdä tässä blogissa, näyttää sinulle kaikki mielenkiintoisimmat asiat vempaimista, ohjelmistoista, laitteistoista, teknologisista trendeistä ja muusta. Tavoitteeni on auttaa sinua navigoimaan digitaalisessa maailmassa yksinkertaisella ja viihdyttävällä tavalla.