Kaip naudoti „gdbserver“ nuotoliniam derinimui „Linux“ sistemoje

Paskutiniai pakeitimai: 14/01/2026
Autorius: Izaokas
  • „gdbserver“ veikia kaip nuotolinis GDB agentas, valdantis procesus kitame kompiuteryje per TCP arba nuoseklųjį ryšį.
  • Norint derinti nuotoliniu būdu, svarbu kompiliuoti su ŽenklaiNaudokite tinkamą „gdb“ ir tinkamai sukonfigūruokite simbolių bei šriftų kelius.
  • „gdbserver“ siūlo vieno proceso ir kelių procesų režimus, taip pat integruojasi su „WinDbg“ ir „QEMU“ branduolio derinimui.
  • Tokios parinktys kaip „--debug“, „sysroot“ ir vertės dydžio apribojimai padeda diagnozuoti problemas ir stabilizuoti sesijas.

Nuotolinis derinimas naudojant „gdbserver“

Jei programuojate C arba C++ kalbomis Linux ir jūs niekada nelietėte „gdbserver“Praleidžiate vieną naudingiausių įrankių, skirtų nuotoliniam procesų derinimui, nesvarbu, ar tai būtų serveryje, įterptojoje sistemoje, ar net virtualioje mašinoje ar WSL. „gdbserver“ toli gražu nėra kažkas „stebuklingo“ ar skirto tik ekspertams, tai tiesiog maža programa, kuri bendrauja su „gdb“ ir valdo tikslinio proceso vykdymą.

Pagrindinė idėja yra labai paprasta.: kompiuteryje, kuriame veikia dvejetainis failas, kurį norite derinti ( taikinys) savo darbo kompiuteryje paleidžiate „gdbserver“; kariuomenė„gdb“ arba net „WinDbg“ paleidžiate su „gdb“ protokolo palaikymu. Abu prisijungia per TCP arba nuoseklųjį prievadą ir iš ten galite nustatyti lūžio taškus, tikrinti kintamuosius, peržiūrėti steką arba sekti programos vykdymą žingsnis po žingsnio, tarsi ji veiktų jūsų kompiuteryje.

Kas yra „gdbserver“ ir kada prasminga jį naudoti?

Kas yra gdbserver?

„gdbserver“ yra nuotolinio derinimo „agentas“, skirtas „GNU gdb“.Jo funkcija yra labai specifinė: jis veikia kompiuteryje, kuriame vykdoma analizuojama programa, valdo tą procesą (arba procesus) ir bendrauja su „gdb“ klientu, esančiu kitame kompiuteryje (arba tame pačiame), per nuotolinį ryšį.

Kasdien naudojant „gdbserver“ naudojamas dviem tipiniais atvejaisDerinimo programinė įranga, veikianti įterptosiose aplinkose (maršrutizatoriuose, plokštėse su supaprastinta „Linux“ operacine sistema, įrenginiuose) DIir kt.) ir derinimo procesus nuotoliniuose „Linux“ kompiuteriuose, kur nėra patogu arba tiesiog neįmanoma turėti „didelės“ gdb su visomis bibliotekomis ir simboliais.

Praktiškai „gdbserver“ atlieka tokias užduotis kaip Skaityti ir rašyti procesų registrus ir atmintį, valdyti vykdymą (tęsti, pristabdyti, žingsnis po žingsnio), valdyti lūžio taškus ir siųsti visus šiuos duomenis į „gdb“ naudojant nuotolinį GDB protokolą. Ši filosofija labai panaši į tokių įrankių kaip „OpenOCD“, kurie veikia kaip tiltas tarp „gdb“ ir a. techninė įranga išorinis, išskyrus tai, kad „gdbserver“ veikia toje pačioje sistemoje, kurioje veikia dvejetainis failas.

Jei atvykote iš aplinkos Windows Taip pat įdomu sužinoti Derinimo programos, tokios kaip „WinDbg“, gali bendrauti su „gdbserver“ sistemoje „Linux“, todėl galite derinti vartotojo procesus „Linux“ sistemoje iš „WinDbg“ naudodami nuotolinio derinimo palaikymą per „gdb“ protokolą, kurį „Microsoft“ įtraukė į naujesnes versijas.

Pagrindiniai derinimo su gdb ir gdbserver reikalavimai

„gdbserver“ naudojimo reikalavimai

Prieš pradėdami derinti nuotoliniu būdu, turite suprasti pagrindinio kompiuterio ir paskirties kompiuterio ryšį.. taikinys Tai yra kompiuteris, kuriame vykdoma derinama programa ir kuriame bus vykdomas „gdbserver“; kariuomenė Tai yra įrenginys, iš kurio paleisite „gdb“ (arba „WinDbg“) ir kuriame bus šaltinio kodas bei, pageidautina, derinimo simboliai.

Svarbiausias atspirties taškas yra dvejetainio kodo kompiliavimas su simboliaisGCC arba g++ tai pasiekiama naudojant vėliavėlę -gir paprastai patartina išjungti optimizavimą (pavyzdžiui, su -O0Tai leidžia derinimo programai tiksliau rodyti kintamuosius, makrokomandas ir kodo struktūrą. Konkrečioms makrokomandoms galite naudoti aukštesnius derinimo lygius, pvz. -g3.

Pagrindinio kompiuterio pusėje jums reikės suderinamos „gdb“ versijos. su tiksline architektūra. Norėdami derinti MIPS, ARM ar kitos architektūros įterptąją sistemą, turite naudoti atitinkamos tarpinių įrankių grandinės gdb (pavyzdžiui). arm-none-eabi-gdb o gdb-multiarch) ir, jei reikia, sukonfigūruokite architektūrą ir endianiškumą su komandos kaip set arch y set endian.

Kalbant apie ryšį, „gdbserver“ palaiko du pagrindinius tipusNuoseklusis ryšys (labai dažnas įterptojoje įrangoje per UART) ir TCP/IP, kuris yra patogiausias, kai taikinys yra tame pačiame tinkle arba yra „Linux“ kompiuteris, pasiekiamas per tinklą. Abiem atvejais komanda naudojama iš „gdb“. target remote prisijungti prie „gdbserver“ pateikto galinio taško.

„gdbserver“ paleidimo būdai: vieno proceso ir kelių procesų režimas

gdbserver vykdymo režimai

gdbserver gali veikti dviem pagrindiniais būdais Kalbant apie vartotojo režimo derinimą: jis tiesiogiai susijęs su vienu procesu arba kaip „procesų serveris“, leidžiantis išvardyti ir prisijungti prie skirtingų sistemos procesų.

Vieno proceso režimu Paleidžiate „gdbserver“, nurodydami pagrindinio kompiuterio prievadą ir programą, kurią reikia paleisti. Paprastame pavyzdyje „Linux“ darbalaukyje galite atlikti tokius veiksmus:

Komanda: gdbserver localhost:3333 foo

Su šia komanda „gdbserver“ paleidžia dvejetainį failą. foo ir jis lieka klausytis 3333 prievadoKol nuotolinis „gdb“ neprisijungia, programa lieka sustabdyta; kai „gdb“ prisijungia prie target remote localhost:3333, procesą pradeda valdyti descrucher.

Daugiaprocesiniame režime (procesų serveryje) naudojama ši parinktis --multiŠiuo atveju „gdbserver“ tiesiogiai nepaleidžia jokios programos, o tiesiog klausosi įeinančių ryšių ir leidžia klientui („gdb“ arba „WinDbg“) valdyti, kurį procesą sukurti arba prie kurio prisijungti:

  „Google“ pristato „Gemini Code Assist“: nemokamą dirbtinio intelekto programavimo asistentą

Komanda: gdbserver --multi localhost:1234

Dirbant su „WinDbg“ „Linux“ sistemoje, šis kelių režimų režimas yra ypač įdomus.Nes iš paties „WinDbg“ galite išvardyti procesus nuotolinėje sistemoje, matyti PID, vartotoją ir komandinę eilutę bei prisijungti prie jus dominančio, panašiai kaip tai daroma su procesų serveriu. dbgsrv.exe „Windows“.

Nuotolinis derinimas naudojant „gdbserver“ ir „gdb“ žingsnis po žingsnio

Panagrinėkime tai labai tipišku pavyzdžiu.Derinti paprastą programą tame pačiame kompiuteryje (pagrindinis ir tikslinis kompiuteriai sutampa) naudojant „gdbserver“, kad imituotumėte nuotolinį scenarijų.

Pirmiausia parašote ir sukompiliuojate nedidelę programąPavyzdžiui, kvailas ciklas, kuris atspausdina skaitiklį:

Komanda: gcc -g foo.c -o foo

Svarbiausia čia yra vėliava -gTai prideda reikiamą derinimo informaciją prie dvejetainio failo, kad „gdb“ galėtų rodyti kodo eilutes, kintamųjų pavadinimus, tipus ir kt. „Tikroje“ kryžminio kompiliavimo aplinkoje šį kompiliavimą atliktumėte naudodami kryžminį įrankių grandinę, o tada nukopijuotumėte dvejetainį failą ir jo priklausomybes į paskirties failą.

Kitas žingsnis – paleisti „gdbserver“ paskirties serveryje.Jei pagrindinis ir paskirties serveriai yra tas pats kompiuteris, tada:

Komanda: gdbserver localhost:3333 foo

Pamatysite panašų pranešimą „Procesas foo sukurtas; pid = XXXX; Klausoma 3333 prievado“. Tai rodo, kad „gdbserver“ sukūrė procesą ir laukia, kol prisijungs „gdb“. Jei naudojate sistemą, kurioje reikia daugiau privilegijų (pavyzdžiui, norint prisijungti prie sistemos procesų), gali tekti paleisti komandą su sudoTačiau visada protinga būti atsargiems suteikiant leidimą. šaknis į desulfuratorių.

Pagrindiniame kompiuteryje paleidžiate „gdb“ nurodydami vietinį vykdomąjį failą (tas pats, kuris veikia paskirties vietoje, arba identiška kopija su simboliais):

Komanda: gdb foo

Patekę į „gdb“, užmezgate nuotolinį ryšį su:

Komanda: target remote localhost:3333

Tuo metu „gdb“ įkelia simbolius iš vietinio dvejetainio failo.Jis sinchronizuojasi su „gdbserver“ ir perima proceso, kuris iš tikrųjų veikia „gdbserver“, valdymą. Toliau procesas vyksta įprasta tvarka: tokios komandos kaip break nustatyti lūžio taškus, continue, step, next, print tikrinti kintamuosius, backtrace pamatyti bateriją ir pan.

Prisijungimas prie veikiančių procesų naudojant „gdbserver“

Ne visada norisi paleisti programą nuo nulio.Dažnai jus domina prisijungti prie jau vykdomo proceso (pavyzdžiui, httpd pagal maršrutizatoriussistemos demonas arba gamybos paslauga).

Įprastas modelis yra naudoti parinktį --attach iš gdbserverioperduodant prievadą, kuriame jis klausysis, ir tikslinio proceso PID. Pavyzdžiui, maršrutizatoriuje, kuriame nukopijavote „gdbserver“, sukompiliuotą pagal jo architektūrą, galite atlikti šiuos veiksmus:

Komanda: gdbserver localhost:3333 --attach <pid_de_httpd>

Pagrindinio kompiuterio pusėje naudosite „gdb“ versiją, kuri palaiko maršrutizatoriaus architektūrą., pavyzdžiui gdb-multiarchiš anksto konfigūruojant architektūrą ir galutinį pritaikymą:

Komanda: set arch mips
set endian big

Tada nurodote vietinį failą, kuriame yra simboliai. nuotolinio dvejetainio failo (pavyzdžiui, file httpd) ir, jei reikia, nurodote gdb, kur dvejetainis failas iš tikrųjų veikia paskirties vietoje, naudodami set remote exec-file /usr/bin/httpdGaliausiai, kaip ir anksčiau, jūs prisijungiate prie:

Komanda: target remote 192.168.0.1:3333

PritvirtinusGalite nustatyti lūžio taškus konkrečioms funkcijoms (pvz., break checkFirmware), tęskite vykdymą ir leiskite įprastam programos srautui (pavyzdžiui, programinės įrangos įkėlimui iš žiniatinklio sąsajos) sukelti lūžio tašką.

„gdbserver“ naudojimas su „WinDbg“ sistemoje „Linux“

Pastaraisiais metais „Microsoft“ pridėjo palaikymą „Linux“ procesų derinimui „WinDbg“. „gdbserver“ naudojimas kaip serverio sąsaja. Ši funkcija skirta scenarijams, kai dirbate su „Windows“, bet kodas veikia „Linux“ (įskaitant WSL).

Norėdami derinti konkretų „Linux“ procesą su „WinDbg“ naudodami „gdbserver“Procesas būtų maždaug toks: pirmiausia Linux kompiuteryje surandate tikslinį procesą naudodami tokią komandą: ps -A (pavyzdžiui a python3 (kuris veikia), tada paleidžiate „gdbserver“ paskirties kompiuteryje:

Komanda: gdbserver localhost:1234 python3

Jei aplinka to reikalauja, gali tekti naudoti sudo gdbserver ...laikantis tų pačių saugumo priemonių kaip visada. Kai „gdbserver“ nurodo, kad jis „klausosi 1234 prievado“, „WinDbg“ programoje eikite į „Failas / Prisijungti prie nuotolinio derintuvo“ ir nurodykite tokio tipo ryšio eilutę:

Komanda: gdb:server=localhost,port=1234

„WinDbg“ naudoja nedidelį „gdb“ protokolo „tvarkyklę“, kad galėtų bendrauti su „gdbserver“. ir, užmezgus ryšį, jis lieka sustabdytas tame taške, kuriame bagažinė proceso. Iš ten galite naudoti jo steko langus, modulius, atmintį, lūžio taškus, taip pat tokias komandas kaip k pamatyti bateriją arba lm išvardyti modulius (turint omenyje, kad kai kurios komandos tikisi PE formato, o ne ELF, todėl tam tikrais atvejais jos gali rodyti keistus duomenis).

„gdbserver“ ir „WinDbg“ procesų serveris

Be vieno proceso atvejo, „WinDbg“ gali prisijungti prie „gdbserver“, veikiančio kaip procesų serveris. kad veiktų panašiau, kaip veikia su nuotoliniais „Windows“ procesais. Šiuo režimu „gdbserver“ paleidžiamas su --multi ir be susijusio proceso:

  Geriausias būdas suaktyvinti mažai energijos naudojantį režimą „iPhone“.

Komanda: sudo gdbserver --multi localhost:1234

„WinDbg“ pasirinkite „Failas / Prisijungti prie procesų serverio“. ir jūs pakartotinai naudojate ryšio eilutę gdb:server=localhost,port=1234Kai ryšys aktyvus, galite išvardyti galimus „Linux“ procesus ir prisijungti prie norimo proceso arba net paleisti naują procesą.

Reikia nepamiršti vienos subtilios detalės.„WinDbg“ skiria „procesų serverį“ ir „vieną taikinį“ pagal tai, ar prisijungiant „gdbserver“ jau yra prijungtas prie proceso. Jei palikote „gdbserver“ prijungtą prie proceso, uždarėte „WinDbg“ ir bandėte prisijungti iš naujo, jis gali būti neaptiktas kaip procesų serveris ir gali tekti paleisti „gdbserver“ iš naujo.

Proceso serverio sesijos užbaigimasPaprastai pakanka tiesiog paspausti CTRL+D konsolėje, kurioje veikia „gdbserver“, ir sustabdyti derinimą iš „WinDbg“. Kai kuriais kraštutiniais atvejais, jei kyla sinchronizavimo problemų, gali tekti visiškai uždaryti derinimo programą ir paleisti „gdbserver“ iš naujo.

Simbolių ir šaltinio kodo valdymas nuotolinio derinimo metu

Vienas iš patogios nuotolinės derinimo funkcijos raktų yra gerai išspręsti simboliai ir šriftai.Be simbolių naršyti steke ar nustatyti lūžio taškus konkrečioms funkcijoms tampa kankinimu.

Klasikiniuose „gdb + gdbserver“ scenarijuose idealu būtų vykdomojo failo su simboliais kopiją laikyti pagrindiniame kompiuteryje. (neapvalinta) ir šaltinio medis. „gdb“ nereikalauja, kad nuotoliniame dvejetainiame faile būtų simboliai; pakanka, kad vietiniame faile, kurį įkeliate su file suderinti nuotolinį vykdomąjį failą poslinkio lygyje.

„WinDbg“ ir „Linux“ derinimo pasaulyje taip pat atsirado tokios paslaugos kaip „DebugInfoD“.kurie rodo simbolius ir šriftus per HTTP. „WinDbg“ gali naudoti specialius kelius, kurių tipas DebugInfoD*https://debuginfod.elfutils.org abu .sympath kaip .srcpath atsisiųsti DWARF simbolius ir „Linux ELF“ dvejetainių failų šaltinio kodą pagal pareikalavimą.

Konkrečiame WSL pavyzdyje, kur vartotojo kodas yra po C:\Users\Bob\Galėtumėte pasakyti „WinDbg“:

Komanda: .sympath C:\Users\Bob\
.srcpath C:\Users\Bob\

Ir jei taip pat norite naudoti „DebugInfoD“ sistemos dvejetainiams failams:

Komanda: .sympath+ DebugInfoD*https://debuginfod.elfutils.org
.srcpath+ DebugInfoD*https://debuginfod.elfutils.org

Naudojant šią konfigūraciją, kai tikrinate steką arba įvedate libc funkcijas„WinDbg“ gali bandyti atsisiųsti atitinkamus DWARF simbolius ir, jei serveris taip pat atskleidžia kodą, gana išsamiai parodyti šaltinį, nors „Windows“ įrankių grandinė viduje neapdoroja ELF ir DWARF taip „natyviai“ kaip PE ir PDB.

Praktinis pavyzdys: C++ programos derinimas naudojant „gdbserver“ ir „WinDbg“

Iliustracinis pavyzdys yra maža C++ programa, kuri ekrane rašo pasisveikinimą., sukompiliuota WSL kalba su derinimo simboliais. Įsivaizduokite programą, kuri rezervuoja std::array<wchar_t, 50> ir nukopijuoja ilgesnį pranešimą, todėl tekstas sutrumpinamas ir atsiranda simbolių ???? pabaigoje

Sukompiliavus su kažkuo panašiu:

Komanda: g++ DisplayGreeting.cpp -g -o DisplayGreeting

Paleidžiate „gdbserver“ pagal tą dvejetainį failą:

Komanda: gdbserver localhost:1234 DisplayGreeting

„WinDbg“ programoje jungiatės su eilute gdb:server=localhost,port=1234 Kai sesija užmegzta ir sukonfigūruoti simbolių bei šriftų keliai, nustatote lūžio tašką DisplayGreeting!maingalite naudoti dx greeting , kad patikrintumėte vietinį masyvą ir pamatytumėte jo dydį (50 pozicijų) ir vizualiai patikrintumėte atminties skirtuke arba kintamųjų rodinyje, kaip nukerpamas pasisveikinimas.

Šio pavyzdžio grožis yra tas, kad jis parodo, jog net ir neturėdama visiško visų ELF/DWARF formatų palaikymo „WinDbg“ programojeNaudodami „gdbserver“ kaip nuotolinę sąsają, galite naršyti stekus, tikrinti tipus, nustatyti lūžio taškus pagal funkcijos pavadinimą ir gana patogiai naršyti C++ kode.

„Linux“ branduolio derinimas naudojant „qemu“ ir „gdb“

„gdbserver“ naudojamas ne tik vartotojo režimu; branduolio režimu taip pat yra labai galingų scenarijų.ypač kai QEMU derinamas su derinimo palaikymu. Nors čia „gdbserver“ vaidmenį atlieka paties QEMU parinktis, metodas yra identiškas: vienas galas paleidžia derinamą sistemą ir atidaro „gdb“ prievadą; kitas galas yra arba „gdb“, arba derinimo programa, kuri kalba nuotoliniu protokolu.

Norėdami derinti branduolį, turite jį kompiliuoti su konkrečiomis derinimo parinktimis.: aktyvuoti derinimo informacijos generavimą (CONFIG_DEBUG_INFO), GDB branduolio skriptai (CONFIG_GDB_SCRIPTS) ir paties branduolio derinimo režimą (CONFIG_DEBUG_KERNELTaip pat svarbu išjungti parinktis, kurios susiejimo metu pašalina simbolius, pvz., „Pašalinti asemblerio sugeneruotus simbolius susiejimo metu“.

Po kompiliavimo gausite dvejetainį failą vmlinux „nenuimtas nuo rankų“kurį naudosite iš „gdb“. Taip pat reikės pagrindinio „initramfs“, kurį galite sugeneruoti tokia komanda:

Komanda: mkinitramfs -o ramdisk.img

Tada paleidžiate QEMU su derinimo parametraisTipiškas pavyzdys apima parinktį -gdb tcp::1234 atidaryti su gdb suderinamą nuotolinį galinį tašką ir -S kad virtuali mašina pradėtų veikti pristabdyta nuo pat pradžių. Taip pat nurodote branduolį su -kernel vmlinux, -initrd ramdisk.img, atmintis su -m 512 ir paprastai nukreipiate konsolę į ttyS0 viską valdyti iš terminalas.

  Kaip atnaujinti „Edge“ į naujausią versiją sistemoje „Windows 11“: išsamus žingsnis po žingsnio vadovas

Sulaikytas QEMU, laukiantis GDBIš pagrindinio kompiuterio paleidžiate gdb, nukreipiantį į vmlinux ir jūs susisiekiate su target remote localhost:1234Iš ten galite nustatyti ankstyvus lūžio taškus, pvz. hb start_kernelir valdyti vykdymą tokiomis komandomis kaip c (tęsti) ir CTRL+C, kad vėl pristabdytumėte.

Naujausi gdb ir gdbserver pakeitimai ir niuansai

Šiuolaikiniuose distribuciniuose paketuose, tokiuose kaip „Red Hat Enterprise Linux 8“, yra nemažai „gdb“ ir „gdbserver“ pakeitimų, į kuriuos verta atkreipti dėmesį.ypač jei naudojate ankstesnes versijas arba turite scenarijus, kurie analizuoja derinimo įrankio išvestį.

Viena vertus, „gdbserver“ dabar paleidžia „žemesnius“ procesus naudodamas apvalkalą.Kaip ir „gdb“, tai leidžia kintamųjų išplėtimą ir keitimą komandinėje eilutėje. Jei dėl kokių nors priežasčių jums reikia išjungti šį veikimą, RHEL 8 yra specialūs nustatymai, skirti grįžti į ankstesnį režimą.

Taip pat buvo pašalinta arba pakeista keletas dalykų: derinimo palaikymas „Java“ programoms, kompiliuotoms su gcj, HP-UX XDB suderinamumo režimas, tokios komandos kaip set remotebaud (pakeistas į set serial baud) arba suderinamumas su tam tikru senesniu formatu stabsBe to, gijų numeracija nebėra visuotinė, o pagal „žemesnį“ giją ir atrodo taip inferior_num.thread_num, su naujais patogumo kintamaisiais, tokiais kaip $_gthread nurodyti visuotinį identifikatorių.

Kita svarbi nauja funkcija yra reguliavimas max-value-sizeTai apriboja atminties kiekį, kurį „gdb“ gali skirti reikšmės turiniui rodyti. Numatytoji reikšmė yra 64 KiB, todėl bandymai spausdinti didelius masyvus arba masines struktūras gali sukelti įspėjimą „reikšmė per didelė“, o ne visos turimos atminties rodymą.

Taip pat buvo pakoreguota, kaip gdb tvarko sysrootNumatytoji reikšmė dabar yra target:Tai reiškia, kad nuotolinių procesų atveju pirmiausia bus bandoma rasti bibliotekas ir simbolius tikslinėje sistemoje. Jei norite, kad pirmenybė būtų teikiama vietiniams simboliams, turėtumėte paleisti set sysroot su jus dominančiu maršrutu prieš tai target remote.

Kalbant apie komandų istoriją, dabar naudojamas aplinkos kintamasis yra GDBHISTSIZE vietoj HISTSIZETai leidžia tiksliai nustatyti, kiek laiko norite išsaugoti derinimo seansuose įvestas komandas, netrukdant kitų programų, kurios naudoja eilučių skaitymo biblioteką, veikimui.

Darbo eigos patarimai ir trikčių šalinimas naudojant „gdbserver“

Norint patogiai atlikti darbą, yra keletas šablonų, kurie paprastai veikia labai gerai. Kuriant įterptosioms sistemoms arba nuotoliniams serveriams, pirmas žingsnis yra kiek įmanoma automatizuoti simbolių kompiliavimą ir dvejetainių failų diegimą paskirties vietoje. Tokiu būdu visada žinosite, kuri vykdomojo failo versija veikia, ir simbolio kopija bus lengvai prieinama pagrindiniame kompiuteryje.

Aplinkose, kuriose yra daug gedimų sukeliančių branduolių, verta išmokti naudoti „gdb“ paketiniu režimu.su tokiomis vėliavomis kaip --batch, --ex y -x automatiškai paleisti komandas branduolių sąraše ir apdoroti jų atgalinius pėdsakus iš scenarijų (pavyzdžiui, PitonasTai leidžia greitai išfiltruoti pasikartojančias problemas, grupuoti gedimus pagal steko pėdsaką ir pan.

Kai nuotolinio ryšio metu kyla problemų, parinktis --debug gdbserver yra tavo geriausias draugasJei, pavyzdžiui, paleidžiate procesų serverį su:

Komanda: gdbserver --debug --multi localhost:1234

„gdbserver“ konsolėje bus rodomi išsamūs įvykių aprašymai. Nuotolinio protokolo lygmeniu tai apima gaunamus paketus, formatavimo klaidas, atjungimo problemas ir kt. Tai labai naudinga, kai jūsų „gdb“ serveris staiga atsijungia, procesas sugenda vos nustačius lūžio tašką arba jūsų derinimo grafinė sąsaja siunčia kažką, ko „gdbserver“ nesupranta.

Tokiuose kontekstuose kaip TP-Link maršrutizatorius, kur prijungiate „gdbserver“ prie svarbaus proceso, pvz. httpdGana dažnai tam tikri lūžio taškai sukuria lenktynių sąlygas arba stebėjimo mechanizmus, kurie nutraukia procesą, kai jis per ilgai „užstringa“ derinimo priemonėje. Tokiose situacijose gali tekti pakoreguoti, kurie signalai blokuojami, kurie gijos kontroliuojami ir, jei taikoma, modifikuoti pačią sistemos konfigūraciją (skirtąjį laiką, aparatinės įrangos stebėjimo mechanizmus), kad būtų galima ilgesnius derinimo seansus.

Gerai naudojant „gdbserver“ reikia sujungti kelis elementusKompiliuokite su atitinkamais simboliais, pasirinkite tinkamą gdb architektūrai, sukonfigūruokite simbolių ir šaltinių kelius, supraskite du pagrindinius gdbserver režimus (vieno proceso ir kelių procesų) ir nebijokite naudoti šių režimų. --debug kai ryšys neveikia taip, kaip tikėtasi. Turint tai pagrindą, programų, veikiančių nuotolinėje „Linux“ sistemoje, maršrutizatoriuje arba virtualioje mašinoje su pasirinktiniu branduoliu iš jūsų kompiuterio, derinimas tampa gana įprastas ir, svarbiausia, neįtikėtinai naudingas.