Isofthiwe yokuhlela ye-C ne-C++ namathuluzi okulungisa iphutha ku-Linux

Isibuyekezo sokugcina: 12/11/2025
  • Ukuthuthukiswa kwe-Linux C/C++ kuncike ku-GCC, Clang/LLVM kanye nezixazululo ezifana ne-IBM Open XL C/C++ ukuze ilethe amabhanari athuthukisiwe, athobela izindinganiso.
  • Ukulungisa iphutha okuphumelelayo ku-Linux kuhlanganisa i-GDB, iziphetho zangaphambili ze-IDE kanye ne-DWARF debuginfo efanele, kunokuthembela kuphela ekuhlanganisweni komhleli njenge-VS Code.
  • Amathuluzi afana ne-strace, i-ltrace, i-SystemTap nokugeleza kokusebenza kokulahla okuyisisekelo kuhambisana ne-GDB ngokudalula izingcingo zesistimu, ukusebenzisana kwelabhulali kanye nesimo sokufa.
  • Izinguquko zakamuva ze-GDB kanye ne-RHEL zithuthukisa ukuqina, ukubhala kanye nokuphepha kwememori, okwenza ukulungisa amaphutha e-C/C++ okukhulu kube lula ukulawula nokubikezela.

Isofthiwe yokuhlela ye-C ne-C++ ye-Linux

Uma uvela kungemuva le-Windows + Visual Studio bese ufika ngokuzumayo ku-codebase enkulu ye-C noma i-C++ ku-Linux, ushintsho lungazizwa lunonya. Ukudlula emakhulwini ezinkulungwane zemigqa nge-GDB ngemuva komhleli ofana ne-VS Code, ukulinda imizuzwana engu-30-60 ngesinyathelo ngasinye, kungakwenza uzibuze ukuthi ingabe wenza okuthile okungalungile kakhulu noma uma ukuthuthukiswa kwe-Linux kuhamba kancane ngomklamo. Izindaba ezinhle ukuthi izintambo zamathuluzi zesimanje ze-Linux nezisusa iphutha ziyakwazi ngokwedlulele; udinga kuphela ukwazi ukuthi uwasetha kanjani nokuthi imaphi amathuluzi alingana namaphrojekthi amakhulu e-C/C++.

Lo mhlahlandlela uhamba nawe endaweni ye-C/C++ compilers, ama-IDE namathuluzi okulungisa iphutha ku-Linux., (bheka I-Master Linux kusukela ekuqaleni), kusuka ku-GCC, Clang/LLVM kanye ne-IBM Open XL C/C++ kuya ku-GDB, Eclipse, SystemTap, strace, ltrace kanye nokugeleza komsebenzi okuphambili kokulahla okuthuthukile. Endleleni, sizophinde sithinte ukusetha okujwayelekile kokufunda (njenge-Geany + GCC) futhi sibonise amathiphu aphathekayo okusheshisa ukulungisa amaphutha nokwenza ukuthuthukiswa kwe-Linux ngo-C no-C++ kusondele kakhulu ekunethezekeni ongase ukujwayele ku-Windows.

Ama-Compilers e-C kanye ne-C++ ku-Linux: i-GCC, i-Clang/LLVM kanye ne-IBM Open XL

Ku-Linux, i-toolchain yereferensi ye-C ne-C++ kuseyi-GCC (i-GNU Compiler Collection), ene-g++ njengesiphetho sayo sangaphambili se-C++. Iningi lokusabalalisa lithumela i-GCC ngokuzenzakalelayo, futhi cishe zonke izifundo, amasistimu wokwakha namapayipi e-CI athatha ubukhona bayo. Uvamise ukuhlanganisa ngemiyalo efana gcc kwe C kanye g++ kwe-C++, isibonelo g++ -g -O2 main.cpp -o app ukwakha kanambambili ongalungiseka, olungiselelwe.

I-Clang kanye ne-LLVM ecosystem ikhule yaba enye indlela enamandla ye-GCC ku-Linux, enikeza ukuhlanganiswa okusheshayo, ukuxilonga okuhle kakhulu kanye nesethi ecebile yamathuluzi (ukuhlaziya okumile, ukufometha kwekhodi, izihlanzisi nokunye okwengeziwe). I-Clang iyindawo engaphambili ye-C/C++ eyakhelwe phezu kwe-LLVM, ingqalasizinda ehlanganisa umthombo ovulekile esekela izakhiwo nezilimi eziningi futhi inakekelwa umphakathi omkhulu.

I-IBM Open XL C/C++ ye-Linux on Power iwuchungechunge lwamathuluzi ezentengiselwano oluhlanganisa ngokuqinile i-Clang/LLVM nobungcweti besikhathi eside bokwenza umqambi we-IBM. Iqondiswe kumasistimu Amandla e-IBM, isebenzisa izici zesimanjemanje zolimi lwe-C/C++ (okuhlanganisa i-C++17), ukulungiselelwa okujwayelekile kwe-LLVM nokuhambisana ne-GCC ukuze ilethe amabhinari okusebenza okuphezulu ku-Power hardware. Lokhu kusho ukuthi uthola izinzuzo ze-LLVM ecosystem kanye nokulungiselelwa okulungiselelwe kwenkundla okuthuthukiswe yi-IBM.

Ezimweni zefa, i-IBM isahlinzeka ngabadidiyeli be-XL C/C++ abadala be-Linux, ngakho izinhlangano ezinamaketango okwakha akhona noma izingqinamba zesitifiketi zingaqhubeka nokusebenzisa lawo ngenkathi zamukela kancane kancane i-Open XL C/C++ ukuze uthole imisebenzi emisha.

I-C kanye ne-C++ compiler toolchains ku-Linux

Ukusethwa kokufunda kwakudala: Ama-GCC nama-IDE alula

Uma usanda kuqala ngo-C noma nge-C++ ku-Linux, ukusethwa okuvamile futhi okuphumelelayo yi-GCC kanye ne-IDE engasindi njenge-Geany. I-Geany iyinkundla enqamulayo (i-Linux ne-Windows), iyashesha, futhi ihlanganisa izici eziyisisekelo njengokuphatha iphrojekthi, imiyalo yokwakha nokulungisa iphutha ngaphandle kwe-overhead yama-IDE asindayo agcwele ngokugcwele.

Izifundo eziningi ze-C/C++ ze-Linux zincoma ngqo le nhlanganisela: I-GCC njengomdidiyeli kanye ne-Geany njengendawo yokuthuthuka. Ngezimfundiso ezinjalo, ngokuvamile ufunda ulimi kusukela phansi: ukuthi iyini i-GNU compiler nokuthi uyicela kanjani, indlela yokuhlela uhlelo, ukuthi isebenza kanjani ngezimo, imisebenzi, ama-arrays, izintambo, izinkomba, izakhiwo, izinyunyana, ifayela le-I/O futhi ekugcineni imiqondo egxile entweni efana nefa, ukulayishwa ngokweqile komsebenzisi kanye ne-polymorphism ku-C++.

Nakuba izinketho ze-IDE zihluka, iseluleko se-toolchain esiyisisekelo sivame ukuhambisana: sebenzisa i-GCC (noma i-g++) kuwo wonke amapulatifomu noma nini lapho kungenzeka. Ku-Linux lokhu okuzenzakalelayo; ku-Windows ne-macOS ungafaka i-GCC nge-MinGW, i-MSYS2, i-WSL, i-Homebrew noma amathuluzi afanayo, ukugcina ukuhamba komsebenzi okufanayo kuwo wonke amasistimu nokwenza kube lula ukwabelana ngemibhalo nama-Makefiles.

Noma izifinyezo ze-IDE zakha izinyathelo, ukuqonda ukuthi ibiza nje gcc or g++ ngemuva kwezigcawu kubalulekile ukulungisa amaphutha okwakhiwa okuyinkimbinkimbi noma izinkinga zesikhathi sokusebenza. Izinketho ezifana -g ngolwazi lokususa iphutha, amazinga okuthuthukisa afana -O0, -O2 or -O3, kanye namafulegi ukuze kulungiswe izixwayiso noma ukuthobela izindinganiso (-Wall, -std=c++17, njll.) konke kunendaba ngokujulile lapho uxilonga iziphazamisi ezicashile.

I-IDE engasindi ye-C ne-C++ ku-Linux

Ukulungisa iphutha kumakhodi amakhulu we-C++: kusuka ku-VS Code kuya ku-GDB yomdabu

Abathuthukisi abasuka ku-Visual Studio ku-Windows baya ku-Linux bavame ukuqala nge-Visual Studio Code kanye nesandiso esisekelwe ku-GDB futhi basheshe baqaphele ukuthi ukungena ku-debugger kungaba kancane kakhulu kuma-backend amakhulu. Kuyinto engavamile ukuba nokulibaziseka kwesekhondi elingu-30-60 esinyathelweni ngasinye lapho kulungiswa amaphutha okucubungula amadokhumenti amakhulu noma amasistimu okulethwa angamakhulu ezinkulungwane zemigqa kanye nezingxenye eziningi zasemuva.

Lokhu okuhlangenwe nakho okuvilaphayo ngokuvamile akuwona umkhawulo we-GDB ngokwayo, kodwa okwesendlalelo sokuhlanganisa noma ukumiswa phakathi kwe-VS Code kanye nesilungisi sephutha esingaphansi. Izinkinga esandisweni sokulungisa amaphutha, ukuthi ama-breakpoint avumelaniswa kanjani, ukuthi ulwazi lwezimpawu lulayishwa kanjani nokuthi imiyalo ye-MI (Machine Interface) ihunyushwa kanjani konke kungasiza ekunciphiseni okukhulu kwezinhlelo zokusebenza eziyinkimbinkimbi zomhlaba wangempela.

Kunezinkinga ezaziwayo ezihlala isikhathi eside ezibikwe kusandiso se-VS Code C/C++ ezihlobene nokunyathela ukusebenza nge-GDB ku-Linux. Kwamanye amaqembu, lokhu kusho ukuthi i-VS Code inhle njengomhleli kodwa akuyona inketho eshesha kakhulu njengesiphetho sokulungisa amaphutha ezinsiza ze-C++; ezinye izindlela ezifana I-Google Antigravity IDE futhi kukhona ama-IDE omdabu. Uma ukusebenza kubalulekile, onjiniyela abaningi babuyela ekusebenziseni i-GDB ngqo noma bashintshele ku-IDE yomdabu ehlanganiswe ngokujulile ne-toolchain yendawo.

Ngakho-ke, uma uthola ukuthi zonke izinyathelo kuseshini yakho yokulungisa iphutha ye-VS Code ku-Linux zithatha isigamu somzuzu, ungacabangi ukuthi ukulungisa iphutha kwe-Linux ngokwemvelo kuhamba kancane. Ngaphambi kokuyeka, kufanelekile ukuhlola i-GDB kutheminali ngokuqondile ku-binary efanayo kanye nokuziphatha okuqhathanisayo. Imvamisa, ukungena ngaphakathi kwe-GDB kushesha kakhulu, okukhomba ekucushweni noma ekunwetshweni kwebhodlela kune-OS eyisisekelo noma inkinga ye-compiler.

Ezitolo ezinkulu ze-C++ ku-Linux, ezinye izindlela ezidumile zokulungisa amaphutha ngokunethezeka zifaka phakathi i-Eclipse ene-CDT (C/C++ Development Tooling), i-CLion, i-Qt Creator, i-KDevelop kanye namanye ama-IDE omdabu ahlanganiswa kakhulu ne-GDB kanye nohlelo lwendawo. Lezi zindawo zinganikeza ukuzulazula komthombo, amafasitela okubuka kanye nama-breakpoint acebile ngenkathi zisasebenzisa i-GDB ngaphansi kwe-hood ngaphandle kwezindleko zezendlalelo zokulungisa iphutha lolimi.

Ukulungisa iphutha C ne-C++ codebase ku-Linux

Ulwazi lokususa iphutha ku-Linux: ELF, DWARF, debuginfo kanye ne-debugsource

Ku-Linux, izinhlelo ezihlanganisiwe nemitapo yolwazi eyabiwe ngokuvamile kugcinwa kumafayela e-ELF (Ifomethi Esebenzisekayo Nexhumekayo), futhi ulwazi lwazo lokususa iphutha oluhlotshaniswayo lubhalwa ngekhodi ngefomethi ye-DWARF. I-DWARF iqukethe imethadatha abalungisa iphutha abayidingayo ukuze bafake ikhodi yomshini emuva kumafayela omthombo, izinombolo zolayini, imisebenzi, izinhlobo nokuguquguqukayo.

Ungahlola izigaba ze-DWARF ku-ELF kanambambili ngamathuluzi afana readelf -w file, elahla amarekhodi okususa iphutha. Nakuba ngokuvamile ungayifundi i-DWARF ngesandla, lokhu kuqinisekisa ukuthi ulwazi lokulungisa iphutha lukhona yini futhi lungaba usizo kakhulu ekuxilongeni izinkinga zohlobo "olungalayishiwe izimpawu" ku-GDB noma kwamanye amathuluzi.

Ifomethi endala yokususa iphutha ebizwa ngokuthi i-STABS isekhona kodwa ibhekwa njengengasebenzi futhi idangele ekusatshalalisweni kweLinux yesimanje njengeRed Hat Enterprise Linux. I-GCC ne-GDB zinikeza usekelo lwemizamo engcono kakhulu ye-STABS, kodwa ithuluzi elibalulekile ku-ecosystem (ngokwesibonelo i-Valgrind noma i- elfutils) ingase ingasebenzi kahle nayo, yingakho i-DWARF inconywa kakhulu.

Ngenxa yokuthi idatha yokususa iphutha ivame ukubankulu, ukusabalalisa okuningi kuyayihlukanisa iphume komambambili abayinhloko ibe ngamaphakheji ahlukene we-debuginfo kanye ne-debugsource. Okusebenzisekayo okufaka endaweni yesikhombi esimisiwe ngokuvamile kususwa izimpawu zako zokususa iphutha ukuze kongiwe isikhala sediski futhi kuncishiswe inkumbulo yonyawo, kuyilapho iphakheji ehambisanayo ye-debuginfo iqukethe idatha ye-DWARF futhi, ngokuzikhethela, i-debugsource ihlanganisa nemithombo efanayo.

Ku-RHEL namasistimu afanayo, ucela ngokusobala ulwazi lokususa iphutha ngesikhathi sokuhlanganisa usebenzisa -g lapho wakha amaphrojekthi akho nge-GCC. Kumamitapo wolwazi esistimu nawenkampani yangaphandle afakwe kumaphakheji, ungathola okuhambisanayo debuginfo futhi debugsource amaphakheji asuka kumakhosombe akhethekile okulungisa iphutha, avame ukuphawulwa ngokuqondile yi-GDB uma iqaphela izimpawu ezingekho phakathi neseshini yokususa iphutha.

Izimpawu zokususa iphutha kanye ne-ELF DWARF ku-Linux

Ukufaka nokubeka i-debuginfo kumabhanari wesistimu

Uma ulungisa amaphutha ezinhlelo ze-C noma ze-C++ ezincike kumalabhulali esistimu, ukufaka i-debuginfo efakwe kulawo malabhulali kungenza umehluko wobusuku nemini kukhwalithi yokulandelela nokuhlola okuguquguqukayo. Ngaphandle kwayo, ubona amakheli angahluziwe noma amagama emisebenzi aphazamisekile kuphela kulabhulali eyabiwe; ngayo, uthola ama-stack traces aqondile emigqa kanye namagama aguquguqukayo angokomfanekiso.

Ekusakazweni okufana ne-RHEL, i-GNU Debugger (GDB) ingabona ngokuzenzakalelayo lapho ulwazi lokususa iphutha lungekho entweni elayishiwe futhi iphakamise umyalo ophathekayo wokufaka okudingekayo. debuginfo iphakethe nge dnf. Uvele usebenzise okunconyiwe dnf debuginfo-install ... umyalo, qinisekisa lapho utshelwa, futhi isistimu ilanda futhi ifake amaphakheji ophawu adingekayo kuseshini yakho.

Uma izeluleko ezizenzakalelayo zingatholakali, ungakwazi ukuhlonza ngokuzenzakalelayo i-debuginfo edingekayo ngokuthola kanambambili noma ifayela lelabhulali enamathuluzi afana locate bese ubuza imininingwane ye-RPM. The locate umyalo uvela ku- mlocate iphakheji, okungenzeka udinge ukuyifaka futhi uyiqalise, futhi uma usunendlela, ungabuza ukuthi iyiphi iphakheji ephethe bese ufaka okuhlukile kwe-debuginfo okuhambisanayo.

Kunezimo lapho iphakheji efake inambambili enikeziwe ingakwazi ukunqunywa, isibonelo lapho ifayela likopishwe ngesandla noma lakhiwe endaweni ngaphandle kokupakishwa. Kulezo zimo, ungase udinge ukubuyela emuva kumafayela ophawu lwangokwezifiso noma, uma kungenzeka, wakhe kabusha kanambambili ngokwakho -g inikwe amandla ukuze i-GDB ibe nedatha egcwele yokususa iphutha.

Khumbula ukuthi ukufaka i-debuginfo kuwo wonke umtapo wolwazi owodwa ohlelweni akuvamile ukuba nesidingo futhi kungamosha. Gxila kumamojula abaluleke kakhulu odabeni lwakho: okuhamba ngakubili kwezinhlelo zakho zokusebenza kanye namalabhulali athile lapho ukuphahlazeka noma ukuziphatha okungalungile kuqalwa khona, kunokudonsa amaphakheji okulungisa amaphutha ayo yonke i-OS.

Ukusebenzisa i-GDB ukulungisa amaphutha ngokusebenzisana ku-Linux

I-GDB iyithuluzi elimaphakathi lokususa iphutha kuzinhlelo zokusebenza zomdabu ze-C ne-C++ ku-Linux, edalula kokubili isixhumi esibonakalayo somugqa womyalo futhi, ngokuhlanganisa, iziphetho zangaphambili eziyingcaca njenge-Eclipse CDT. Ku-Red Hat Enterprise Linux, ukusatshalaliswa okujwayelekile kufaka phakathi i-GDB efakwe ngokugcwele kanye nama-GUI angakhethwa.

Ukuze ulungise uhlelo kusukela ekuqaleni, ngokuvamile uyalucela gdb ./program, lungisa izindawo zokunqamuka njengoba kudingeka, bese wethula ukwenza ngaphakathi kwe-GDB nge run umyalo. Kungenjalo, unganamathisela kuhlelo oseluvele lusebenza nalo gdb -p <pid> noma ngokuqala i-GDB nokusebenzisa i attach umyalo kanye ne-ID yenqubo.

Uma i-GDB ingakwazi ukulinganisa ithagethi esebenzisekayo ye-PID enikeziwe ngesikhathi sokunamathisela, ungayitshela ngokusobala ukuthi iyiphi kanambambili ongayisebenzisa ngokusebenzisa file umyalo bese uqhubeka nokulungisa iphutha. Lokhu kubaluleke kakhulu uma usebenzisana neziqalisi ngokwezifiso, imibhalo yokugoqa noma ukusetha okunambambili omningi lapho indlela yangempela esebenzisekayo ingabonakali.

Uma isinamathiselwe noma yethuliwe, ulawula ukugeleza kohlelo ngemiyalo efana nayo n (Olandelayo), s (isinyathelo), until, finish futhi nje c (qhubeka), ngenkathi uvala isilungisi sephutha nge q uma sekuqediwe. Ngamunye wale miyalo une-semantics ethize mayelana nokuthi uyangena yini emizimbeni yokusebenza, usebenza kuze kube umugqa onikeziwe noma uqalise kabusha ukwenza kuze kufike iphuzu elilandelayo lokunqamuka noma ukunqanyulwa.

Ukuze uthole isimo sokuqonda, i-GDB inikeza imiyalo ecebile yokuhlola ukuze ihlole okuguquguqukayo, izitaki zezingcingo, amarejista nokunye, futhi inikeze nosizo lwesimo ngokusebenzisa help info kanye nemiyalo efanayo. Ungabonisa umugqa womthombo wamanje nge list, phrinta okuguquguqukayo nge print, hlola amafreyimu estaki nge backtrace futhi uzulazule kumafreyimu nge frame, up futhi down.

Izindawo zokuphumula, izindawo zokubukela kanye nezimo ku-GDB

Ekulungiseni amaphutha emhlabeni wangempela, cishe awusoze wasuka ngokungaboni main(); esikhundleni salokho, ubeka izindawo zokunqamuka ukuze umise uhlelo ngokuqondile lapho ukuziphatha kuba mnandi. Umyalo ojwayelekile break ikuvumela ukuthi usethe amaphoyinti okunqamuka kungaba ngefayela nangenombolo yomugqa noma ngegama lomsebenzi, futhi i-GDB izomisa ukwenza ngokushaya okulandelayo.

Isibonelo, ungasetha i-breakpoint emugqeni othile womthombo usebenzisa i-syntax efana nale break file.cpp:123, noma ikhefu ekuqaleni komsebenzi nge break my_function. Lapho indawo enqanyuliwe isifinyelelwa, i-GDB imisa uhlelo, ikuvumele ukuthi uhlole okuguquguqukayo kwasendaweni, uhlole isitaki socingo bese unquma ukuthi uyangenelela, uyangena noma uqhubeke.

Ama-breakpoint anemibandela abalulekile uma iphutha livela kuphela ngemva kokuphindaphinda kaningi noma ngaphansi kwamanani athile okokufaka. Ungakwazi ukuhlobanisa isimo se-Boolean esibhalwe ku-C noma ku-C++ nendawo yokuphumula ukuze i-GDB ime kuphela lapho isimo sihlola ukuze sibe iqiniso, ukwehlisa ngendlela emangalisayo ukuma okungadingekile nokwenza amaluphu okulungisa noma imishini yezwe eyinkimbinkimbi isebenze kahle kakhulu.

Ukuze kuqashwe izinguquko kudatha esikhundleni sokugeleza kwekhodi, i-GDB inikeza amaphoyinti wokubuka, aqala lapho isisho (ngokuvamile sishintshashintsha) sifundwa noma sibhalelwa. Ngemiyalo efana watch, rwatch (funda) noma awatch (funda/ubhale), ungakwazi ukumisa ukusebenza lapho inkambu ethile ishintshiwe noma ifinyelelwa, okuwusizo ikakhulukazi ekulandeleleni izinguquko zesimo ezingalindelekile.

Uphatha wonke ama-breakpoint nama-watchpoints ngemiyalo efana nokuthi info breakpoints or info br, futhi ungasusa ngenombolo noma ngendawo usebenzisa delete ngezimpikiswano ezifanele. Lokhu kwenza kube lula ukugcina isethi ehlanzekile yama-breakpoint asebenzayo futhi uvimbele ukudideka lapho ususa iphutha kumamojula amaningi noma izikhathi.

Ukulungisa amaphutha ezinqubo ezinemicu eminingi kanye nezinefoloko

Ukulungisa amaphutha ezinhlelweni ze-C kanye ne-C++ ezisebenzisa kakhulu imicu noma amafoloko kudinga ulwazi olwengeziwe lokuthi i-GDB ilandelela kanjani izimo zokusebenza. Ngokuzenzakalelayo, i-GDB iqoka intambo yamanje futhi imiyalo eminingi isebenza kuleyo ntambo ngaphandle uma ushintsha ngokucacile usebenzisa thread kanye nesihlonzi sentambo.

Uma uhlelo lwakho lufola, isethingi set detach-on-fork inquma ukuthi i-GDB iyayilandela yini ingane noma umzali nokuthi iyisingatha kanjani inqubo engalandelwa. Ungakwazi ukumisa i-GDB ukuthi igcine ukulawula kwakho kokubili noma isuse ohlangothini olulodwa ngokuzenzakalelayo, kuye ngokuthi umzali, ingane noma bobabili babalulekile ekuhlaziyeni kwakho.

Izinguqulo ezintsha ze-GDB ziguqule indlela izintambo ezibalwa ngayo, zethula i-ID yentambo ephansi ngayinye kanye ne-ID yentambo yomhlaba wonke ehlukile ukuze ihambisane. Ukuguquguquka okulula $_thread kanye ne-Python API's InferiorThread.num manje ibonisa izinombolo ezingaphansi ngakunye, kuyilapho isihlonzi somhlaba wonke sitholakala nge $_gthread futhi InferiorThread.global_num, ukuqinisekisa ukuthi amathuluzi amadala asekelwe kuma-ID omhlaba ahlala esebenza.

Ukuphatha amasignali ekususeni iphutha okunezintambo eziningi nakho kuthuthukisiwe ukuze amasiginali alethwe njalo kuchungechunge olulungile. Uma ushintsha intambo ngemva kokuthi isignali imise uhlelo bese uzama ukuqhubeka, i-GDB ingacela ukuqinisekiswa, ivimbele ukulethwa okungalungile futhi yenze ukulungisa iphutha okuhlobene nesiginali kuthembeke kakhulu.

Konke lokhu kusho ukuthi uma uhlaziya ama-deadlock, izinhlanga noma ukuphahlazeka okubangelwe yisignali okungajwayelekile, ungathembela kumodeli yentambo ye-GDB ukuze ulandelele indlela efanele yokwenza ngokulawula okunembile. Kuhlanganiswe nama-breakpoints, ama-watchpoints nama-catchpoints, lokhu kunika amandla ukulungisa okuqinile kwezintambo eziningi ngisho nasezinsizeni ze-C++ ezihambisana kakhulu.

Isistimu yokulandela kanye namakholi welabhulali: i-strace, i-ltrace ne-SystemTap

Kwesinye isikhathi indlela eshesha kakhulu yokuqonda ukuthi kungani uhlelo lwe-C noma lwe-C++ lungaziphathi kahle akukhona ukudlula kuwo wonke ulayini, kodwa ukubona ukuthi lusebenzisana kanjani nesistimu yokusebenza kanye nemitapo yolwazi eyabiwe. I-Linux inikeza amathuluzi amaningana anamandla kulokhu: i-strace, i-ltrace, i-SystemTap kanye ne-GDB ngokwayo ngama-catchpoints akhethekile.

The strace Usizo lulandelela izingcingo zesistimu-ukusebenzelana ne-kernel njenge open, read, write, mmap, execve nokunye-kanye nemingcele kanye namanani okubuyisela. Ungakwazi ukusebenzisa uhlelo lwakho ngokusebenzisa strace noma unamathisele enkambisweni esebenzayo yi-PID, ngokuzikhethela ukuhlunga ukuthi yiziphi i-syscalls ezizoboniswa kusetshenziswa izinkulumo ezifana -e trace=call kanye nokulawula ukuthi ulandela izingane ezinemfoloko noma ezinentambo -f.

Ngoba izinhlelo zokusebenza zangempela zikhipha izinombolo eziningi zezingcingo zesistimu, ukuhlanganisa strace ngamathuluzi egobolondo njenge tee kuvamile kukho kokubili ukubuka okukhiphayo bukhoma futhi ukugcine ukuze kuhlaziywe. Lokhu kukusiza ukuthi ubone amafayela angekho, izinkinga zemvume, ukuziphatha kwenethiwekhi okungalindelekile noma ezinye izinkinga zeleveli ye-OS okungenzeka zingabonakali ngaphakathi kwekhodi ngokwayo.

I-strace ehambisanayo, ltrace igxile ekubizeni imisebenzi yelabhulali eyabiwe endaweni yomsebenzisi, ikhombisa izikhalazo kanye nokubuyisela amanani emisebenzi ethunyelwe evela ezintweni eziguqukayo. Ku-RHEL 8 kunomkhawulo owaziwayo lapho i-ltrace ingakwazi ukulandelela okusebenzisekayo kwesistimu ethile, kodwa isebenza ngokujwayelekile kumabhinari akhiwe ngabasebenzisi, ikwenze kube ithuluzi elibalulekile lokuqonda ukuthi uhlelo lwakho lusebenzisa kanjani ama-API welabhulali.

I-SystemTap iwuhlaka lokulandelela oluthuthuke kakhulu oluvumela izibambi zemicimbi yangokwezifiso kukho kokubili imicimbi ye-kernel neyesikhala somsebenzisi zisebenzisa ulimi lwayo lokubhala. Kungaba yinkimbinkimbi kakhulu ukusebenzisa kune-strace noma i-ltrace kodwa isikali kangcono futhi sisekela ukuhlunga nokuhlanganisa okuyinkimbinkimbi. Ukuze kube lula, kubizwe iskripthi esiyisampula strace.stp imikhumbi nge-SystemTap ukulingisa impatho efana ne-strace isebenzisa ingqalasizinda ye-SystemTap.

I-GDB ngokwayo ingabamba iqhaza ekulandeleni ngokusebenzisa amaphuzu okubamba ama-syscalls namasignali, ngemiyalo efana nale catch syscall futhi catch signal. Lokhu kubangela ukuthi i-debugger iyeke ukusebenza noma nini lapho uhlelo lwenza izingcingo ezithile zesistimu noma luthola amasignali athile, okungaba usizo kakhulu uma udinga ukulawulwa okuhle ngesikhathi sokulungisa amaphutha okusebenzisana.

Okulahlwayo okubalulekile kanye nokulungiswa kwamaphutha kwe-post-mortem nge-GDB

Uma uhlelo lwe-C noma lwe-C++ luphahlazeka noma lulenga ngendlela okunzima ukuyikhiqiza ngokuhlanganyela, ukulahlwa okuyinhloko kunikeza isifinyezo sememori yayo kanye nesimo ngesikhathi esibucayi. Ukulahlwa okuyisisekelo kuyifayela le-ELF eliqukethe okuqukethwe kwezingxenye zememori yenqubo (isitaki, inqwaba, amamephu) lapho iphela, ongayihlaziya kamuva nge-GDB njengokungathi ubunamathisele ngesikhathi sokuphahlazeka.

Ukuze usebenzise ukulahlwa okuyinhloko ngempumelelo, kufanele uqinisekise ukuthi kukhiqizwa futhi akuvinjwa imikhawulo yensiza noma ukucushwa. Shell imikhawulo ezifana ulimit -c ingavimbela amafayela angumongo ukuthi enziwe; ukubeka umkhawulo ku unlimited kususa izingcezu zosayizi, yize kufanele ubuyekeze imiphumela yesikhala sediski ezinhlelweni zokukhiqiza.

Kuzinhlelo zesimanje ze-RHEL, systemd-coredump iphatha ukulahlwa okubalulekile ngokusobala futhi ikugcine endaweni emaphakathi efana nejenali esikhundleni sokuhamba core amafayela ahlakazeke kuzo zonke izinkomba. The coredumpctl ithuluzi likuvumela ukuthi ubhale uhlu lokuphahlazeka okurekhodiwe, uhlole imethadatha yakho futhi ukhiphe ifayela eliwumgogodla wangempela endleleni ekhethiwe ukuze uhlaziye ngokujulile.

Uma udala ukugeleza komsebenzi wokuthwebula kokuphahlazeka okuhlelekile, kuvamile ukufaka i- sos iphakethe kanye nokusetshenziswa sosreport ukukhiqiza i-tarball ngokucushwa kwesistimu namalogi. Kuhlanganiswe nefayela eliyinhloko elithunyelwe kanye nama-binary ohlelo lokusebenza, lokhu kukunikeza konke okudingekayo ukuze uhlaziye ukuphahlazeka emshinini ohlukile noma ukukunikeze elinye ithimba noma umthengisi.

Ungaze uqalise ngamabomu i-core dump yenqubo engaphenduli ngokuyithumela isignali yokuyekisa noma usebenzisa amathuluzi anjenge gcore, elahla inkumbulo yenqubo ngenkathi isasebenza. Phakathi nesikhathi gcore ukulahla, inqubo imisa okwesikhashana, bese iqala kabusha ukusebenza okuvamile, okuvumela ukuhlaziywa okungaxhunyiwe ku-inthanethi kwesimo esiyinkinga ngaphandle kokuqeda ngokuphelele isevisi.

Ukuthola okulungile okusebenzisekayo kanye nezimpawu zokuhlaziya okubalulekile

Ukuze kuhlaziywe ukulahlwa okubalulekile ngendlela enenjongo, i-GDB idinga kokubili ifayela eliwumongo kanye nengokoqobo elisebenzisekayo (kanye nanoma imaphi amalabhulali abelwe ahlobene) alikhiqizile. Lokhu kubalulekile ngoba amabhanari angafani—akhiwe ngezinguqulo ezihlukene—angaholela ekulandeleleni okungemuva okudukisayo nezakhiwo eziguquguqukayo ezingalungile.

Amathuluzi afana coredumpctl info bonisa imethadatha enemininingwane yomgogodla ngamunye othwetshuliwe, okuhlanganisa indlela eya kokusebenzisekayo okuyinhloko kanye ne-ID yokwakha ekhomba ngokukhethekile kanambambili. I-ID yokwakha ingase ibukeke njenge-hexadecimal hashi ende, futhi ungayiqhathanisa ne-ID yokwakha yekhophi yakho yasendaweni ye-binary ukuze uqinisekise ukuthi ziyefana ngaphambi kokuqala i-GDB.

Uma okusebenzisekayo kanye namalabhulali ako aqhamuka kumaphakheji e-RPM, ungasebenzisa sosreport kanye nesizindalwazi sephakheji ukuze ulande izinguqulo ezidingekayo. Kwezinye izimo, ungakwazi ukufaka kabusha amaphakheji afanayo emshinini ozinikele wokususa iphutha bese usebenzisa i-GDB's. set sysroot ukucushwa ukuze ukhombe esakhiweni selabhulali esibukweni sokulungisa iphutha lesitayela esikude.

Uma usunezinto ezifanele, uqala iseshini ye-GDB ngomyalo njengokuthi gdb /path/to/exe /path/to/core bese uvumela i-GDB ilayishe umongo. Uma i-debuginfo ingekho kunoma imaphi amamojula, i-GDB izobonisa imilayezo ebonisa ukuthi imaphi amaphakheji noma amafayela ophawu okufanele uwafake ukuze uthole ukubonakala okugcwele kophawu.

Uma izimpawu zokususa iphutha zohlelo lwakho lokusebenza zinikezwa ngamafayela ahlukene kunokuba ngamaphakheji, ungawalayisha ngokusobala usebenzisa symbol-file umyalo ngaphakathi kwe-GDB. Awuphoqelekile ukuba nolwazi lokulungisa iphutha lomtapo wolwazi ngamunye owabiwe ngaphakathi; ukugxila kuhlelo lwakho lokusebenza kanye namalayibrari asolisayo ngokuvamile kwanele ukwakha kabusha i-stack kanye nesimo esifanele.

Lapho uhlaziya ukulahlwa okuyinhloko, khumbula ukuthi imiyalo yokulawula ukwenziwa kohlelo (njengesinyathelo noma ukuqhubeka) ayisasebenzi, ngoba ayikho inqubo ebukhoma enamathiselwe. Kunalokho, uthembele emiyalweni yokuhlola—ukuhlola amafreyimu estaki, okuguquguqukayo kwasendaweni nokomhlaba, izifunda zenkumbulo nochungechunge—ukuthola ukuthi kungani ukuphahlazeka kwenzeke noma lapho uhlelo lubhajwe khona.

Izimo zokulahla inkumbulo ezithuthukisiwe kanye nezinguquko ze-GDB ku-RHEL yesimanje

Ezinye izinhlelo zokusebenza ezivikeleke kakhulu noma ezisebenza kahle kakhulu zimaka izingxenye zememori yazo njengezingenakulahleka zisebenzisa amafulegi afana VM_DONTDUMP, okuvimbela leyo nkumbulo ukuthi ingabhalwa kumafayela ayisisekelo. Lokhu kuvikela idatha ebucayi (isibonelo, okhiye be-cryptographic noma amarekhodi ezezimali) futhi kunciphisa osayizi bokulahla, kodwa kwenza ukuhlaziya okugcwele okungaxhunyiwe ku-inthanethi kube nzima.

Uma unesidingo esinamandla sokuthwebula yonke into—okuhlanganisa nezindawo ngokuvamile ezingabaliwe ekulahlwayo—ungamisa i-GDB ukuthi indibe ifulegi elingalahli futhi iphoqelele ukulahlwa kwenkumbulo okuphelele. I-GDB inikeza izinketho zokukhipha VM_DONTDUMP futhi ulahle yonke inkumbulo yenqubo efayeleni eliwumongo le-forensics noma ukulungisa amaphutha okujulile.

Ngasohlangothini lwamathuluzi, inguqulo ye-GDB ethunyelwe nge-RHEL 8 yethula izinguquko eziningi eziphukayo nezokuziphatha uma kuqhathaniswa ne-RHEL 7, ikakhulukazi ezindaweni lapho abantu babevame ukuhlaziya ukuphuma kwayo kwetheminali. Esikhundleni sokukhuhla okuphumayo kombhalo, i-Red Hat incoma ukubhala izikripthi kusetshenziswa i-GDB's Python API noma i-Machine Interface (MI) protocol, zombili eziklanyelwe ukusetshenziswa okuhleliwe.

Izinguquko eziphawulekayo zihlanganisa i-GDBserver yethula okuphansi ngegobolondo ukuze ivumele ukunwetshwa kwe-agumenti, ukususwa kosekelo lwe-GCJ (Java), i-syntax ebuyekeziwe yemiyalo yokulahla uphawu lokulungisa kanye nokulungiswa ekuphathweni kwe-sysroot ukuze kusekelwe kangcono ukulungisa amaphutha okukude. Eminye imiyalo nezindlela, njengokuhambisana kwe-HP-UX XDB kanye remotebaud, zithathe umhlalaphansi noma zashintshwa kwafakwa okunye okuvamile okufana nalokhu set serial baud.

Ngaphezu kwalokho, i-GDB yethula imikhawulo efana max-value-size ukuvimbela ukwabiwa kwememori engenamkhawulo lapho uphrinta amanani amakhulu kakhulu, kushintshe ukuthi usayizi womlando womyalo ulawulwa kanjani GDBHISTSIZE esikhundleni se HISTSIZE, futhi yengeza umkhawulo kumakhandidethi wokuqeda nge set max-completions. Lezi zivikelo zisiza ukugwema ukubanda noma ukusetshenziswa kwenkumbulo ngokweqile lapho kulungiswa amaphutha ezinhlelo ze-pathological noma ezonakele.

Umthelela ophelele wabathuthukisi be-C no-C++ ku-Linux uyi-debugger enamandla kakhulu, ebhalwe phansi esikalela kuma-codebases amakhulu kanye nezimo zokwehluleka eziyinqaba, inqobo nje uma wazi imiyalo ebuyekeziwe namafindo okumisa. Ihlanganiswe nengqalasizinda yesimanje yabahlanganisi efana ne-GCC ne-Clang/LLVM (kanye neminikelo efana ne-IBM Open XL C/C++ on Power), i-GDB yenza umgogodla wochungechunge lwamathuluzi olunamandla lokuthuthukisa nokuxazulula inkinga isofthiwe yomdabu eyinkimbinkimbi ku-Linux.

Ukukhetha isihlanganisi esilungile kanye ne-IDE, ukunika amandla ulwazi lokususa iphutha le-DWARF nokufaka amaphakheji e-debuginfo, kanye ne-GDB esebenzayo, i-strace, i-ltrace, i-SystemTap kanye nokugeleza kokulahlwa komsebenzi okuyisisekelo kukunikeza indawo ye-Linux C/C++ esheshayo, esobala futhi elungele i-backends enkulu kunazo zonke, ngisho noma okuvelayo kwakho kokuqala kuvele kuseshini yokususa i-VSbuggish. Ngokucushwa okulungile nokuqwashisa ngamathuluzi atholakalayo, ukulungisa iphutha ku-Linux akufani kuphela nokunethezeka kwe-Visual Studio ku-Windows; ezimeni eziningi, empeleni ikunikeza ukulawula okuhle nokubonakala okujulile kokuthi izinhlelo zakho zokusebenza ze-C ne-C++ ziziphatha kanjani ngempela.

aprenda linux
I-athikili ehlobene:
I-Master Linux kusuka ku-Scratch: Ukusuka Eziyisisekelo kuya Emakhono Athuthukile
Okuthunyelwe okuhlobene: