- Ang gdbserver ay gumaganap bilang isang remote agent ng GDB upang kontrolin ang mga proseso sa ibang makina sa pamamagitan ng TCP o serial.
- Para mag-debug nang malayuan, mahalagang i-compile gamit ang mga simboloGamitin ang naaangkop na gdb at maayos na i-configure ang mga path ng simbolo at font.
- Nag-aalok ang gdbserver ng single-process mode at multi-process mode, na isinasama rin sa WinDbg at QEMU para sa kernel debugging.
- Ang mga opsyon tulad ng --debug, sysroot, at mga limitasyon sa laki ng halaga ay nakakatulong sa pag-diagnose ng mga problema at pagpapatatag ng mga sesyon.
Kung nagprograma ka sa C o C++ Linux at hindi mo pa nagagalaw ang gdbserverNawawala mo ang isa sa mga pinakakapaki-pakinabang na tool para sa pag-debug ng mga proseso nang malayuan, maging sa isang server, isang embedded system, o kahit sa loob ng isang virtual machine o WSL. Malayo sa pagiging isang bagay na "mahiwaga" o nakalaan para sa mga eksperto, ang gdbserver ay isa lamang maliit na programa na nakikipag-ugnayan sa gdb at kumokontrol sa pagpapatupad ng target na proseso.
Ang pangunahing ideya ay napakasimple.: sa makina kung saan tumatakbo ang binary na gusto mong i-debug (ang target) sinisimulan mo ang gdbserver; sa iyong computer sa trabaho (ang maramiSinisimulan mo ang gdb o kahit ang WinDbg na may suporta para sa gdb protocol. Parehong kumokonekta sa pamamagitan ng TCP o isang serial port, at mula doon ay maaari kang magtakda ng mga breakpoint, mag-inspeksyon ng mga variable, tingnan ang stack, o sundin ang sunud-sunod na pagpapatupad na parang tumatakbo ang programa sa iyong sariling makina.
Ano ang gdbserver at kailan ito makatuwiran na gamitin?

Ang gdbserver ay isang remote debugging na "ahente" para sa GNU gdbAng tungkulin nito ay napakaespesipiko: tumatakbo ito sa makina kung saan tumatakbo ang programang susuriin, kinokontrol ang prosesong iyon (o mga prosesong iyon), at nakikipag-ugnayan sa isang gdb client na matatagpuan sa ibang makina (o sa parehong makina) sa pamamagitan ng isang malayuang koneksyon.
Sa pang-araw-araw na paggamit, ang gdbserver ay ginagamit sa dalawang tipikal na senaryoSoftware sa pag-debug na tumatakbo sa mga naka-embed na kapaligiran (mga router, board na may mga lumang Linux, mga device) IoTatbp.) at mga proseso ng pag-debug sa mga malalayong makinang Linux, kung saan hindi maginhawa o sadyang hindi posible na magkaroon ng isang "fat" gdb na naglalaman ng lahat ng mga library at simbolo.
Sa praktikal na antas, ang gdbserver ay humahawak sa mga gawain tulad ng Nagbabasa at nagsusulat ng mga rehistro ng proseso at memorya, kinokontrol ang pagpapatupad (magpatuloy, mag-pause, mag-step through), namamahala ng mga breakpoint, at nagpapadala ng lahat ng datos na ito sa gdb gamit ang GDB remote protocol. Ang pilosopiyang ito ay halos kapareho ng sa mga tool tulad ng OpenOCD, na nagsisilbing tulay sa pagitan ng gdb at isang hardware external, na may pagkakaiba na ang gdbserver ay tumatakbo sa parehong sistema kung saan tumatakbo ang binary.
Kung galing ka sa mga kapaligirang Windows Nakakatuwa ring malaman Ang mga debugger tulad ng WinDbg ay maaaring makipag-ugnayan sa isang gdbserver sa Linux, kaya maaari mong i-debug ang mga proseso ng user sa Linux mula sa WinDbg gamit ang remote debugging support sa pamamagitan ng gdb protocol na isinama ng Microsoft sa mga kamakailang bersyon.
Mga pangunahing kinakailangan para sa pag-debug gamit ang gdb at gdbserver

Bago ka magsimulang mag-debug nang malayuan, kailangan mong maunawaan ang ugnayan ng host/target.. Ang target Ito ang makina kung saan tumatakbo ang programang ide-debug at kung saan isasagawa ang gdbserver; ang marami Ito ang makina kung saan mo patatakbuhin ang gdb (o WinDbg) at kung saan makikita mo ang source code at, mas mabuti, ang mga debugging symbol.
Ang mahalagang panimulang punto ay ang pag-compile ng binary gamit ang mga simboloSa GCC o g++, nakakamit ito gamit ang flag -gat karaniwang ipinapayong huwag ding paganahin ang mga pag-optimize (halimbawa, sa -O0Nagbibigay-daan ito sa debugger na mas tumpak na maipakita ang mga variable, macro, at istruktura ng code. Para sa mga partikular na macro, maaari kang gumamit ng mas mataas na antas ng pag-debug, tulad ng -g3.
Sa panig ng host, kakailanganin mo ng isang katugmang bersyon ng gdb gamit ang target na arkitektura. Para i-debug ang isang MIPS, ARM, o iba pang arkitekturang naka-embed na sistema, dapat mong gamitin ang gdb ng kaukulang cross-toolchain (halimbawa) arm-none-eabi-gdb o gdb-multiarch) at, kung kinakailangan, i-configure ang arkitektura at endianness gamit ang comandos bilang set arch y set endian.
Tungkol sa koneksyon, sinusuportahan ng gdbserver ang dalawang pangunahing uriIsang serial link (karaniwan sa naka-embed na hardware, sa pamamagitan ng UART) at TCP/IP, na pinaka-maginhawa kapag ang target ay nasa parehong network o isang Linux machine na naa-access sa network. Sa parehong kaso, ang utos ay ginagamit mula sa gdb. target remote para kumonekta sa endpoint na nakalantad ng gdbserver.
Mga paraan upang simulan ang gdbserver: single process at multi-process mode

Ang gdbserver ay maaaring gumana sa dalawang pangunahing paraan Kapag pinag-uusapan natin ang pag-debug ng user-mode: direktang nauugnay sa isang proseso o bilang isang "process server" na nagpapahintulot sa paglilista at pag-attach sa iba't ibang proseso ng system.
Sa mode na iisang proseso Ilulunsad mo ang gdbserver, at tutukuyin ang host:port at ang programang patatakbuhin. Sa isang simpleng halimbawa sa isang Linux desktop machine, maaari mong gawin ang ganito:
Utos: gdbserver localhost:3333 foo
Gamit ang utos na iyon, sisimulan ng gdbserver ang binary. foo at nananatili siyang nakikinig sa port 3333Hangga't hindi nakakonekta ang isang remote gdb, mananatiling nakahinto ang programa; kapag nakakonekta ang gdb sa target remote localhost:3333, ang proseso ay nagsisimulang kontrolin ng descrusher.
Sa multi-process mode (process server) ginagamit ang opsyon --multiSa kasong ito, ang gdbserver ay hindi direktang naglulunsad ng anumang programa, ngunit nakikinig lamang para sa mga papasok na koneksyon at nagbibigay-daan sa client (gdb o WinDbg) na pamahalaan kung aling proseso ang gagawin o ikakabit:
Utos: gdbserver --multi localhost:1234
Kapag gumagamit ng WinDbg sa Linux, ang multi-mode na ito ay lalong kawili-wili.Dahil mula mismo sa WinDbg, maaari mong ilista ang mga proseso sa remote system, tingnan ang PID, user at command line, at i-attach sa isa na interesado ka, sa katulad na paraan kung paano ito ginagawa sa process server. dbgsrv.exe sa Windows.
Malayuang pag-debug gamit ang gdbserver at gdb hakbang-hakbang
Gawin nating simple ito gamit ang isang napaka-tipikal na halimbawa.: I-debug ang isang simpleng aplikasyon sa parehong makina (pagtutugma ng host at target) gamit ang gdbserver upang gayahin ang malayuang senaryo.
Una, sumulat at mag-compile ka ng isang maliit na programaHalimbawa, isang nakakatawang loop na nagpi-print ng counter:
Utos: gcc -g foo.c -o foo
Ang susi rito ay ang bandila -gIdinaragdag nito ang kinakailangang impormasyon sa pag-debug sa binary upang maipakita ng gdb ang mga linya ng code, pangalan ng variable, uri, atbp. Sa isang "totoong" cross-compiling environment, gagawin mo ang compilation na ito gamit ang cross-toolchain at pagkatapos ay kokopyahin ang parehong binary at ang mga dependency nito sa target.
Ang susunod na hakbang ay ang pagsisimula ng gdbserver sa targetKung ang host at target ay iisang makina, kung gayon:
Utos: gdbserver localhost:3333 foo
Makakakita ka ng mensaheng katulad ng “Nalikha na ang prosesong foo; pid = XXXX; Nakikinig sa port 3333”. Ipinapahiwatig nito na nilikha ng gdbserver ang proseso at naghihintay na kumonekta ang gdb. Kung ikaw ay nasa isang sistema kung saan kinakailangan ang higit pang mga pribilehiyo (halimbawa, para makakonekta sa mga proseso ng sistema), maaaring kailanganin mong patakbuhin ang utos gamit ang sudoPero makabubuting maging maingat palagi kapag nagbibigay ng pahintulot. ugat papunta sa desulfurizer.
Sa host, sisimulan mo ang gdb na tumutukoy sa lokal na executable (ang parehong tumatakbo sa target, o isang magkaparehong kopya na may mga simbolo):
Utos: gdb foo
Kapag nasa loob ka na ng gdb, itatatag mo ang remote na koneksyon gamit ang:
Utos: target remote localhost:3333
Sa puntong iyon, nilo-load ng gdb ang mga simbolo mula sa lokal na binary.Nagsi-synchronize ito sa gdbserver at kinokontrol ang prosesong aktwal na tumatakbo sa ilalim ng gdbserver. Mula doon, ang daloy ay ang karaniwan: mga utos tulad ng break upang magtakda ng mga breaking point, continue, step, next, print upang siyasatin ang mga baryabol, backtrace para makita ang baterya, atbp.
Pagkonekta sa mga tumatakbong proseso gamit ang gdbserver
Hindi mo laging gugustuhing simulan ang programa mula sa simula.Kadalasan ay interesado kang sumali sa isang prosesong tumatakbo na (halimbawa, isang httpd isang routerisang system daemon o isang serbisyo sa produksyon).
Ang karaniwang pattern ay ang paggamit ng opsyon --attach mula sa gdbserverpagpasa sa port kung saan ito makikinig at ang PID ng target na proseso. Halimbawa, sa isang router kung saan kinopya mo ang isang gdbserver na na-compile para sa arkitektura nito, maaari mong gawin:
Utos: gdbserver localhost:3333 --attach <pid_de_httpd>
Sa panig ng host, gagamit ka ng bersyon ng gdb na sumusuporta sa arkitektura ng router., Halimbawa gdb-multiarchpag-configure ng arkitektura at endianness nang maaga:
Utos: set arch mips
set endian big
Pagkatapos ay tukuyin mo ang lokal na file na naglalaman ng mga simbolo. ng malayuang binary (halimbawa file httpd) at, kung kinakailangan, sasabihin mo sa gdb kung saan aktwal na tumatakbo ang binary sa target gamit ang set remote exec-file /usr/bin/httpdSa wakas, tulad ng dati, makakakonekta ka sa:
Utos: target remote 192.168.0.1:3333
Kapag nakakabit naMaaari kang magtakda ng mga breakpoint sa mga partikular na function (halimbawa break checkFirmware), ipagpatuloy ang pagpapatupad at hayaang ang normal na daloy ng programa (halimbawa, ang pag-upload ng firmware mula sa web interface) ang mag-trigger ng breakpoint.
Paggamit ng gdbserver gamit ang WinDbg sa Linux
Sa mga nakaraang taon, nagdagdag ang Microsoft ng suporta para sa pag-debug ng mga proseso ng Linux sa WinDbg. Gamit ang gdbserver bilang backend. Ang functionality na ito ay inilaan para sa mga senaryo kung saan nagtatrabaho ka sa Windows ngunit ang code ay tumatakbo sa Linux (kabilang ang WSL).
Para i-debug ang isang partikular na proseso ng Linux gamit ang WinDbg gamit ang gdbserverAng daloy ay magiging ganito: una mong hahanapin ang target na proseso sa makina ng Linux gamit ang isang utos tulad ng ps -A (halimbawa a python3 na tumatakbo), pagkatapos ay ilulunsad mo ang gdbserver sa target:
Utos: gdbserver localhost:1234 python3
Kung kinakailangan ito ng kapaligiran, maaaring kailanganin mong gamitin sudo gdbserver ...na may parehong pag-iingat sa seguridad gaya ng dati. Kapag ipinahiwatig ng gdbserver na ito ay “Listening on port 1234”, sa WinDbg, pumunta sa “File / Connect to remote debugger” at tukuyin ang isang connection string na may sumusunod na uri:
Utos: gdb:server=localhost,port=1234
Gumagamit ang WinDbg ng isang maliit na gdb protocol na "driver" upang makipag-ugnayan sa gdbserver at, kapag naitatag na ang koneksyon, mananatili itong nakahinto sa punto ng boot ng proseso. Mula doon, magagamit mo ang mga stack window, module, memory, breakpoint, pati na rin ang mga command tulad ng k para makita ang baterya o lm para ilista ang mga module (tandaan na ang ilang command ay umaasa sa PE format at hindi ELF, kaya maaaring magpakita ang mga ito ng kakaibang data sa ilang partikular na kaso).
gdbserver at WinDbg process server
Bukod sa single-process case, maaaring kumonekta ang WinDbg sa isang gdbserver na gumaganap bilang isang process server. para gumana nang mas katulad ng kung paano ito gumagana sa mga malayuang proseso ng Windows. Sa mode na ito, inilulunsad ang gdbserver gamit ang --multi at walang kaugnay na proseso:
Utos: sudo gdbserver --multi localhost:1234
Mula sa WinDbg, piliin ang "File / Connect to process server" at gagamitin mo ulit ang connection string gdb:server=localhost,port=1234Kapag aktibo ang koneksyon, maaari mong ilista ang mga available na proseso ng Linux at ilakip ito sa gusto mo o kaya naman ay maglunsad ng bagong proseso.
Dapat tandaan ang isang banayad na detalye.Pinag-iiba ng WinDbg ang "process server" at "single target" depende sa kung ang gdbserver ay naka-attach na sa isang proseso kapag ito ay nakakonekta. Kung iniwan mong naka-attach ang gdbserver sa isang proseso, isinara ang WinDbg, at pagkatapos ay sinubukang kumonekta muli, maaaring hindi ito matukoy bilang isang process server, at maaaring kailanganin mong i-restart ang gdbserver.
Para tapusin ang isang sesyon ng process serverKadalasan, sapat na ang pagpindot lamang ng CTRL+D sa console kung saan tumatakbo ang gdbserver at paghinto sa pag-debug mula sa WinDbg. Sa ilang matinding kaso, kung may mga problema sa synchronization, maaaring kailanganing ganap na isara ang debugger at i-restart ang gdbserver mula sa simula.
Pamamahala ng simbolo at source code sa remote debugging
Isa sa mga susi para maging maginhawa ang remote debugging ay ang maayos na pagtukoy sa mga simbolo at font.Kung walang mga simbolo, ang pag-navigate sa stack o pagtatakda ng mga breakpoint sa mga partikular na function ay nagiging pahirap.
Sa mga klasikong senaryo ng gdb + gdbserver, mainam na magtago ng kopya ng executable na may mga simbolo sa host. (unstripped) at ang source tree. Hindi kinakailangan ng gdb ang remote binary na maglaman ng mga simbolo; sapat na ang lokal na file na iyong nilo-load file itugma ang remote executable sa offset level.
Sa mundo ng pag-debug ng WinDbg at Linux, lumitaw din ang mga serbisyong tulad ng DebugInfoD.na naglalantad ng mga simbolo at font sa pamamagitan ng HTTP. Maaaring gumamit ang WinDbg ng mga espesyal na path ng uri DebugInfoD*https://debuginfod.elfutils.org kapwa .sympath tulad ng sa .srcpath para mag-download ng on-demand na mga simbolo ng DWARF at source code ng Linux ELF binaries.
Sa isang partikular na halimbawa gamit ang WSL, kung saan ang user code ay nasa ilalim ng C:\Users\Bob\Maaari mong sabihin sa WinDbg:
Utos: .sympath C:\Users\Bob\
.srcpath C:\Users\Bob\
At kung gusto mo ring gamitin ang DebugInfoD para sa mga binary ng system:
Utos: .sympath+ DebugInfoD*https://debuginfod.elfutils.org
.srcpath+ DebugInfoD*https://debuginfod.elfutils.org
Gamit ang configuration na ito, kapag sinuri mo ang stack o ipinasok ang mga libc functionMaaaring tangkaing i-download ng WinDbg ang kaukulang mga simbolo ng DWARF at, kung ipapakita rin ng server ang code, ipapakita nito ang pinagmulan nang detalyado, bagama't sa loob ng Windows toolchain ay hindi pinangangasiwaan ang ELF at DWARF nang kasing "katutubo" ng PE at PDB.
Praktikal na halimbawa: pag-debug ng isang programang C++ gamit ang gdbserver at WinDbg
Ang isang naglalarawang halimbawa ay isang maliit na C++ application na nagsusulat ng pagbati sa screen., na-compile sa WSL na may mga debugging symbol. Isipin ang isang programa na nagrereserba ng std::array<wchar_t, 50> at kinokopya ang isang mas mahabang mensahe dito, na nagiging sanhi ng pagputol ng teksto at paglitaw ng mga karakter ???? sa dulo
Pagkatapos mag-compile gamit ang isang bagay tulad ng:
Utos: g++ DisplayGreeting.cpp -g -o DisplayGreeting
Sinisimulan mo ang gdbserver laban sa binary na iyon:
Utos: gdbserver localhost:1234 DisplayGreeting
Sa WinDbg, kumokonekta ka gamit ang string gdb:server=localhost,port=1234 At, kapag naitatag na ang sesyon at na-configure na ang mga path ng simbolo at font, magtatakda ka ng breakpoint DisplayGreeting!mainmaaari mong gamitin dx greeting para siyasatin ang lokal na array at makita ang laki nito (50 posisyon), at biswal na tingnan sa memory tab o sa variables view kung paano pinuputol ang greeting.
Ang kagandahan ng halimbawang ito ay ipinapakita nito na, kahit walang ganap na suporta para sa lahat ng format ng ELF/DWARF sa WinDbgMaaari kang mag-travel ng mga stack, mag-inspeksyon ng mga uri, magtakda ng mga breakpoint ayon sa pangalan ng function, at mag-navigate sa C++ code nang maginhawa gamit ang gdbserver bilang isang remote backend.
Pag-debug ng Linux kernel gamit ang qemu at gdb
Ang gdbserver ay hindi lamang ginagamit sa user mode; mayroon ding mga napakalakas na senaryo sa kernel mode.lalo na kapag pinagsama mo ang QEMU sa suporta sa pag-debug. Bagama't dito ang papel ng "gdbserver" ay ginagampanan ng sariling opsyon ng QEMU, ang pamamaraan ay magkapareho: ang isang dulo ay nagpapatakbo ng sistemang ide-debug at nagbubukas ng gdb port; ang kabilang dulo ay alinman sa gdb o isang debugger na nagsasalita ng remote protocol.
Para i-debug ang kernel, kailangan mo itong i-compile gamit ang mga partikular na opsyon sa pag-debug.: i-activate ang pagbuo ng impormasyon sa pag-debug (CONFIG_DEBUG_INFO), ang mga script ng GDB kernel (CONFIG_GDB_SCRIPTS) at ang sariling debug mode ng kernel (CONFIG_DEBUG_KERNELMahalaga ring i-disable ang mga opsyon na nag-aalis ng mga simbolo habang nagli-link, tulad ng "Mga simbolong binuo ng strip assembler habang nagli-link".
Pagkatapos ng pag-compile, makakakuha ka ng binary file vmlinux "hindi hinubaran"na siyang gagamitin mo mula sa gdb. Kailangan mo rin ng isang pangunahing initramfs, na maaari mong mabuo gamit ang isang utos na tulad nito:
Utos: mkinitramfs -o ramdisk.img
Pagkatapos ay sisimulan mo ang QEMU gamit ang mga parameter ng pag-debugKasama sa isang tipikal na halimbawa ang opsyon -gdb tcp::1234 para magbukas ng isang remote endpoint na tugma sa gdb, at -S para magsimulang naka-pause ang virtual machine mula sa simula. Tinutukoy mo rin ang kernel gamit ang -kernel vmlinux, Ang -initrd ramdisk.img, ang alaala kasama -m 512 at karaniwan mong nire-redirect ang console sa ttyS0 para pamahalaan ang lahat mula sa pandulo.
Habang nakakulong ang QEMU at naghihintay ng gdbMula sa host machine, sisimulan mo ang gdb na nakaturo sa vmlinux at kumonekta ka sa target remote localhost:1234Mula roon, maaari kang magtakda ng mga maagang breakpoint, halimbawa isang hb start_kernelat kontrolin ang pagpapatupad gamit ang mga utos tulad ng c (magpatuloy) at CTRL+C para i-pause muli.
Mga kamakailang pagbabago at mga nuances sa gdb at gdbserver
Sa mga modernong distribusyon tulad ng Red Hat Enterprise Linux 8, mayroong ilang mga pagbabago sa gdb at gdbserver na dapat tandaan.lalo na kung galing ka sa mga nakaraang bersyon o may mga script na nagsusuri sa debugger output.
Sa isang banda, sinisimulan na ngayon ng gdbserver ang mga prosesong "mas mababa" gamit ang isang shellTulad ng gdb, pinapayagan nito ang variable expansion at mga substitution sa command line. Kung sa anumang kadahilanan ay kailangan mong i-disable ang pag-uugaling ito, may mga partikular na setting na nakadokumento sa RHEL 8 upang bumalik sa nakaraang mode.
May ilang bagay din na inalis o binago: suporta sa pag-debug para sa mga programang Java na na-compile gamit ang gcj, ang HP-UX XDB compatibility mode, mga utos tulad ng set remotebaud (pinalitan ng set serial baud) o pagiging tugma sa isang partikular na mas lumang format ng stabsBukod pa rito, ang pagnunumero ng thread ay hindi na pandaigdigan, kundi ayon sa "mas mababang" thread, at lumalabas bilang inferior_num.thread_num, na may mga bagong variable ng kaginhawahan tulad ng $_gthread upang tumukoy sa pandaigdigang pantukoy.
Ang isa pang mahalagang bagong tampok ay ang pagsasaayos max-value-sizeNililimitahan nito ang dami ng memorya na maaaring ilaan ng gdb upang ipakita ang mga nilalaman ng isang halaga. Ang default ay 64 KiB, kaya ang mga pagtatangka na mag-print ng malalaking array o napakalaking istruktura ay maaaring magresulta sa babala na "value too large" sa halip na ipakita ang lahat ng magagamit na memorya.
Inayos din kung paano pinangangasiwaan ng gdb ang sysrootAng default na halaga ngayon ay target:Nangangahulugan ito na para sa mga malayuang proseso, susubukan muna nitong maghanap ng mga library at simbolo sa target na sistema. Kung gusto mong unahin nito ang mga lokal na simbolo, dapat mong patakbuhin ang set sysroot gamit ang rutang interesado ka bago gawin target remote.
Tungkol sa kasaysayan ng utos, ang variable ng kapaligiran na ginagamit ngayon ay GDBHISTSIZE sa halip ng HISTSIZENagbibigay-daan ito sa iyong pinuhin kung gaano katagal mo gustong panatilihin ang mga command na iyong na-type sa mga debugging session nang hindi nakakasagabal sa pag-uugali ng ibang mga application na gumagamit ng line reading library.
Mga tip sa daloy ng trabaho at pag-troubleshoot gamit ang gdbserver
Para magkaroon ng komportableng daloy ng trabaho, may ilang mga pattern na kadalasang gumagana nang maayos. Kapag bumubuo para sa mga embedded system o remote server, ang unang hakbang ay i-automate ang symbol compilation at binary deployment sa target hangga't maaari. Sa ganitong paraan, lagi mong malalaman kung aling bersyon ng executable ang tumatakbo at madaling magagamit ang symbol copy sa host.
Sa mga kapaligirang maraming crash core, mahalagang matutunan kung paano gamitin ang gdb sa batch mode., na may mga watawat tulad ng --batch, --ex y -x para awtomatikong ilunsad ang mga command sa isang listahan ng mga core at iproseso ang kanilang mga backtrace mula sa mga script (halimbawa sa SawaNagbibigay-daan ito sa iyong mabilis na salain ang mga paulit-ulit na problema, pangkatin ang mga pagkabigo ayon sa stack trace, atbp.
Kapag may nangyaring mali sa remote na koneksyon, ang opsyon --debug Ang gdbserver ang iyong matalik na kaibiganKung magsisimula ka, halimbawa, ng isang process server na may:
Utos: gdbserver --debug --multi localhost:1234
Ipapakita ng gdbserver console ang detalyadong bakas ng nangyayari Sa antas ng remote protocol, kabilang dito ang mga papasok na packet, mga error sa pag-format, mga problema sa pagdiskonekta, atbp. Ito ay lubhang kapaki-pakinabang kapag ang iyong gdb server ay biglang nagdiskonekta, ang isang proseso ay nag-crash sa sandaling maitakda ang isang breakpoint, o ang iyong debug GUI ay nagpapadala ng isang bagay na hindi naiintindihan ng gdbserver.
Sa mga konteksto tulad ng isang TP-Link router kung saan ikinakabit mo ang gdbserver sa isang kritikal na proseso tulad ng httpdMedyo karaniwan para sa ilang mga breakpoint na lumikha ng mga kondisyon ng karera o mga watchdog na sumisira sa proseso kapag ito ay nananatiling "natigil" nang masyadong matagal sa debugger. Sa mga sitwasyong ito, maaaring kailanganing isaayos kung aling mga signal ang naharang, kung aling mga thread ang kinokontrol, at, kung naaangkop, baguhin ang mismong configuration ng system (mga oras ng timeout, mga hardware watchdog) upang payagan ang mas mahabang mga sesyon ng pag-debug.
Ang mahusay na paggamit ng gdbserver ay kinabibilangan ng pagsasama-sama ng ilang pirasoMag-compile gamit ang mga naaangkop na simbolo, piliin ang tamang gdb para sa arkitektura, i-configure ang mga path ng simbolo at pinagmulan, unawain ang dalawang pangunahing mode ng gdbserver (single-process at multi-process), at huwag matakot na umalis sa mode na ito. --debug kapag ang koneksyon ay hindi kumikilos ayon sa inaasahan. Dahil sa pundasyong iyan, ang pag-debug ng mga application na tumatakbo sa isang remote Linux system, isang router, o isang virtual machine na may custom na kernel mula sa iyong PC ay nagiging rutina at, higit sa lahat, lubhang kapaki-pakinabang.
Masigasig na manunulat tungkol sa mundo ng mga byte at teknolohiya sa pangkalahatan. Gustung-gusto kong ibahagi ang aking kaalaman sa pamamagitan ng pagsusulat, at iyon ang gagawin ko sa blog na ito, ipakita sa iyo ang lahat ng mga pinaka-kagiliw-giliw na bagay tungkol sa mga gadget, software, hardware, teknolohikal na uso, at higit pa. Ang layunin ko ay tulungan kang mag-navigate sa digital na mundo sa simple at nakakaaliw na paraan.