- Kobcinta Linux C/C++ ee casriga ahi waxay ku tiirsan tahay GCC, Clang/LLVM iyo xalalka IBM Open XL C/C++ si ay u bixiyaan la hagaajiyay, jaangooyooyin waafaqsan heerarka.
- Debugin wax ku ool ah oo Linux ah waxay isku daraysaa GDB, IDE-dhamaadka hore iyo DWARF debuginfo saxda ah, halkii aad ku tiirsanaan lahayd oo keliya isku dhafka tifaftirayaasha sida VS Code.
- Aaladaha sida strace, ltrace, SystemTap iyo qulqulka shaqada ee xudunta u ah ayaa kaabaya GDB iyagoo soo bandhigaya wicitaanada nidaamka, isdhexgalka maktabadda iyo xaalada dhimashada kadib.
- Isbeddellada GDB iyo RHEL ee u dambeeyay waxay kor u qaadaan adkaynta, qorista iyo badbaadada xusuusta, taasoo ka dhigaysa cabbirka weyn ee C/C++ mid la xakameyn karo lana saadaalin karo.
Haddii aad ka imanayso asalka Windows + Visual Studio oo aad si lama filaan ah ugu degto C ama C++ codebase weyn Linux, isbeddelku wuxuu dareemi karaa naxariis darro. Ka gudubka boqolaal kun oo khad oo GDB ah oo ka dambeeya tifaftiraha sida VS Code, sugitaanka 30-60 ilbiriqsi tilaabo kasta, waxay kaa dhigi kartaa inaad la yaabto inaad wax xun samaynayso ama haddii horumarka Linux uu yahay mid gaabis ah naqshadeynta. Akhbaarta wanaagsan ayaa ah in silsiladaha aaladaha casriga ah ee Linux iyo kuwa wax hagaajiya ay aad awood u leeyihiin; kaliya waxaad u baahan tahay inaad ogaato sida loo dejiyo iyo agabka ku habboon mashaariicda C/C++ ee waaweyn.
Hagahan wuxuu kugu dhex marayaa muuqaalka C/C++ compilers, IDE-yada iyo aaladaha wax-ka-daridda Linux, (eeg Master Linux ka xoq), laga bilaabo GCC, Clang/LLVM iyo IBM Fur XL C/C++ ilaa GDB, Eclipse, SystemTap, strace, ltrace iyo shaqo-qulqulo hoose oo horumarsan. Intii aan jidka ku jirno, waxaan sidoo kale taaban doonaa habaynta waxbarashada caadiga ah (sida Geany + GCC) oo aan tusno talooyin la taaban karo si loo dedejiyo cilladaha loogana sameeyo horumarinta Linux ee C iyo C ++ aad ugu dhow raaxada aad u isticmaali karto Windows.
Isu-dubaridayaasha C iyo C++ ee Linux: GCC, Clang/LLVM iyo IBM Open XL
Linux, qalabka tixraaca ee C iyo C++ wali waa GCC (GNU Compiler Collection), oo g++ u ah C++-dhamaadka hore. Inta badan qaybintu waxay u rartay GCC si caadi ah, iyo ku dhawaad dhammaan casharrada, nidaamyada dhisa iyo dhuumaha CI waxay u qaataan jiritaankeeda. Caadi ahaan waxaad ku ururisaa amarrada sida gcc ee C iyo g++ tusaale ahaan C++ g++ -g -O2 main.cpp -o app si loo dhiso binary la hagaajin karo, la hagaajiyay.
Clang iyo nidaamka deegaanka LLVM waxay u koreen beddel xoog leh oo GCC Linux ah, oo bixisa isku-dubarid degdeg ah, baadhitaano heersare ah iyo qalab qani ah (falanqaynta joogtada ah, qaabaynta koodhka, nadiifiyaha iyo wax ka badan). Clang waa C/C++-dhamaadka hore ee laga dul dhisay LLVM, kaabayaal isku xidhe il furan oo modular ah oo taageera dhismooyin iyo luqado badan waxaana si firfircoon u ilaaliya bulsho weyn.
IBM Fur XL C/C++ ee Linux on Power waa qalab ganacsi oo si adag isugu xidha Clang/LLVM khibradda kobcinta isuduwaha ee IBM. Lagu bartilmaameedsaday nidaamyada Awoodda IBM, waxay ka faa'iidaysataa sifooyinka luqadda ee casriga ah ee C/C++ (ay ku jiraan C++17), hagaajinta LLVM ee caadiga ah iyo la jaanqaadka GCC si ay u keento ikhtiyaarada waxqabadka sare leh ee qalabka Korontada. Tani waxay ka dhigan tahay inaad helayso faa'iidooyinka nidaamka deegaanka ee LLVM oo lagu daray hagaajinta habaysan ee ay samaysay IBM.
Deegaannada dhaxalka ah, IBM waxay wali siisaa isku-dubaridihii hore ee XL C/C++ ee Linux, si ururada leh silsilado dhismo ama caqabado shahaado ah ay sii wadan karaan adeegsiga kuwa iyaga oo si tartiib tartiib ah u qaadanaya Fur XL C/C++ culaysyo shaqo oo cusub.

Habaynta waxbarashada caadiga ah: GCC iyo IDE-yada fudud
Haddii aad hadda ka bilaabayso C ama C++ Linux, habayn aad u caadi ah oo waxtar leh waa GCC oo lagu daray IDE-ga fudud sida Geany. Geany waa iskutallaab (Linux iyo Windows), dhakhso badan, oo isku daraa sifooyinka aasaasiga ah sida maaraynta mashruuca, dhisidda amarrada iyo cilladaha fudud iyada oo aan la dhaafin IDE-ga culus.
Koorasyo badan oo C/C++ ah oo dheer oo Linux ah ayaa ku taliya sida saxda ah isku dhafkan: GCC oo ah isu-duwaha iyo Geany oo ah deegaanka horumarka. Casharrada noocan oo kale ah, waxaad inta badan luqadda ka barataa xagga hoose: waxa GNU compiler-ku yahay iyo sida loogu baaqo, sida loo habeeyo barnaamijka, sida loogu shaqeeyo shuruudaha, hawlaha, arraysyada, xargaha, tilmaamayaasha, qaab-dhismeedka, ururrada, faylka I/O iyo ugu dambayntii fikrado ku jihaysan sida dhaxalka, culayska xad-dhaafka ah ee hawlwadeenka iyo polymorphism ee C++.
In kasta oo xulashooyinka IDE ay kala duwan yihiin, talada silsiladda qalabka ee hoose waxay u egtahay inay isku mid tahay: isticmaal GCC (ama g++) dhammaan goobaha mar kasta oo ay suurtogal tahay. On Linux tani waa default; Windows iyo macOS waxaad ku rakibi kartaa GCC adoo isticmaalaya MinGW, MSYS2, WSL, Homebrew ama qalabyo la mid ah, adoo ilaalinaya qulqulka shaqada isku midka ah ee nidaamyada oo fududeynaya wadaagista qoraallada iyo Makefiles.
Xataa marka IDE abstracts dhisto tillaabooyin, fahamka in uu si fudud u wacayo gcc or g++ daaha gadaashiisa ayaa muhiim u ah ciribtirka dhismaha kakan ama arimaha runtime. Ikhtiyaarada sida -g macluumaadka khaladka, heerarka hagaajinta sida -O0, -O2 or -O3, iyo calanka si loo saxo digniinaha ama u hoggaansanaanta heerarka (-Wall, -std=c++17, iwm.) Dhammaan arrimahan ayaa si qoto dheer leh marka la baarayo kutaannada qarsoon.

Ka saarida xarumaha waaweyn ee C++: laga bilaabo VS Code ilaa GDB-ga hooyo
Horumariyayaasha ka soo guuraya Visual Studio ee Windows una wareegaya Linux badanaa waxay ku bilaabaan Visual Studio Code iyo kordhin ku salaysan GDB waxayna si dhakhso ah u ogaadaan in tallaabadda khaladka ay si xanuun badan u gaabin karto dhabarka dambe ee waaweyn. Maaha wax aan la maqlin in 30-60 ilbiriqsi dib-u-dhac ah lagu sameeyo tallaabo kasta marka la tirtirayo habaynta dukumeentiyada waaweyn ama hababka gaarsiinta oo leh boqolaal kun oo xariiqyo ah iyo qaybo badan oo gadaal ah.
Waayo-aragnimadan caajiska ahi caadiyan maaha xaddidaadda GDB lafteeda, laakiin waa lakabka is dhexgalka ama qaabaynta u dhaxaysa VS Code iyo cilladaha hoose. Arrimaha ku jira kordhinta qaladka, sida meelaha jaban loo wada shaqeeyo, sida macluumaadka summadda loo raro iyo sida MI (Machine Interface) amarada loo tarjumo dhamaantood waxay gacan ka geysan karaan hoos u dhac weyn oo ku yimaada codsiyada dhabta ah ee aduunka.
Waxaa jira arrimo la yaqaan oo muddo dheer soo jiray oo laga soo sheegay kordhinta VS Code C/C++ oo la xiriira waxqabadka tallaabooyinka ee GDB ee Linux. Kooxaha qaar, tani waxay la macno tahay in VS Code uu u fiican yahay tafatire ahaan laakiin maahan ikhtiyaarka ugu dhaqsiyaha badan sidii hore-dhamaadka loogu talagalay ciribtirka adeegyada daanyeerka C++; beddelka sida Google Antigravity IDE iyo IDE-yada asalka ah ayaa jira. Marka waxqabadku muhiim yahay, injineero badan ayaa dib ugu noqda inay si toos ah u isticmaalaan GDB ama u beddelaan IDE-ga hooyo si qoto dheer ugu dhex jira silsiladda aaladaha maxalliga ah.
Markaa, haddii aad ogaato in tallaabo kasta oo ka mid ah fadhigaaga khaladka khaladka ah ee VS Code ee Linux ay qaadato nus daqiiqo, ha u qaadan in qaladka Linux si dabiici ah u yahay mid gaabis ah. Kahor intaadan is dhiibin, waxaa habboon in lagu tijaabiyo GDB terminal si toos ah isla binary iyo isbarbardhigga dabeecadda. Badanaa, ku-tallabashada gudaha GDB aad bay u dhakhso badan tahay, taas oo farta ku fiirsata qaabeynta ama cirifka kordhinta halkii ay ka ahaan lahayd dhibaatada aasaasiga ah ee OS ama compiler.
Dukaamada waaweyn ee C ++ ee Linux, beddelka caanka ah ee ciribtirka raaxada leh waxaa ka mid ah Eclipse leh CDT (C/C++ Qalabka Horumarinta), CLion, Qt Creator, KDevelop iyo IDE-yada kale ee wadaniga ah kuwaas oo si adag ula midoobey GDB iyo nidaamka deegaanka. Deegaannadani waxay ku siin karaan marin-u-socod isha, daawashada daaqadaha iyo meelaha hodanka ah iyagoo weli isticmaalaya GDB daboolka hoostiisa iyada oo aan dusha sare laga saarin lakabyada wax-ka-hortagga luqadda.

Macluumaadka khaladka ee Linux: ELF, DWARF, debuginfo iyo debugsource
Linux, barnaamijyada la soo ururiyey iyo maktabadaha la wadaago waxaa badanaa lagu kaydiyaa ELF (Fulin iyo Qaabka La Xiriiri karo), iyo macluumaadka cilladaha la xiriira waxay ku qoran yihiin qaabka DWARF. DWARF waxa ay ka kooban tahay xogta badan ee ay u baahan yihiin in ay khariidad ku sameeyaan koodka mashiinka si ay ugu noqdaan faylalka isha, lambarada khadka, shaqooyinka, noocyada iyo doorsoomayaasha.
Waxaad ku kormeeri kartaa qaybaha DWARF ee binary ELF oo wata qalab sida readelf -w file, kaas oo daadiya diiwaannada khaladka cayriin. Iyadoo aanad sida caadiga ah u akhrin DWARF gacanta, tani waxay xaqiijinaysaa in macluumaadka cilladuhu uu jiro oo waxay noqon kartaa mid qiimo leh ogaanshaha arrimaha nooca "calaamadaha raran" ee GDB ama qalabyada kale.
Qaabkii da'da ahaa ee qaladka loo yaqaan STABS ayaa wali jira laakiin waxaa loo arkaa mid duugoobay oo laga niyad jabiyay qaybinta Linux casriga ah sida koofiyadda cas ee Linux. GCC iyo GDB waxay bixiyaan taageerada ugu wanaagsan ee STABS, laakiin qalabka muhiimka ah ee nidaamka deegaanka (tusaale ahaan Valgrind ama elfutils) waxaa laga yaabaa inaysan si sax ah ula shaqeyn, waana sababta DWARF si xooggan loogu taliyay.
Sababtoo ah xogta khaladku waxay u egtahay inay weyn tahay, qaybinta badankeed waxay u kala qaybisay binaries-yada ugu muhiimsan xirmooyin debuginfo iyo debugsource kala duwan. Fududeynta aad ka rakibto kaydka caadiga ah waxaa badanaa laga xayuubiyaa calaamadaheeda debug si loo badbaadiyo booska diskka oo loo yareeyo raadadka xusuusta, halka xirmada debuginfo ee u dhiganta ay ka kooban tahay xogta DWARF iyo, ikhtiyaari, debugsource waxaa ku jira ilaha u dhigma.
RHEL iyo nidaamyada la midka ah, waxaad si cad u codsataa macluumaadka cilladaha wakhtiga la ururinayo adoo isticmaalaya -g markaad dhiseyso mashaariicdaada GCC. Maktabadaha nidaamka iyo kuwa saddexaad ee lagu rakibay baakooyinka, waxaad ka heli kartaa wixii khuseeya debuginfo iyo debugsource baakadaha kaydka khaladka ee gaarka ah, oo inta badan si toos ah u si maldahan GDB marka ay aragto calaamadaha maqan inta lagu guda jiro kalfadhiga khaladka.

Ku rakibida iyo helitaanka debuginfo ee nidaamka binaries
Marka aad qaladka ka saarto barnaamijyada C ama C++ ee ku xiran nidaamka maktabadaha, in debuginfo lagu rakibo maktabadahaas waxay sameyn kartaa farqi habeen iyo maalin ah tayada gadaal-raacyada iyo kormeerka doorsooma. La'aanteed, waxaad arkaysaa oo keliya cinwaanno cayriin ah ama magacyo hawleed la mariyey oo ku jira maktabadaha la wadaago; iyada, waxaad heleysaa raad-raac sax ah oo sax ah iyo magacyo doorsoomayaal ah.
Qaybinta RHEL oo kale ah, GNU Debugger (GDB) si toos ah ayuu u ogaan karaa marka macluumaadka debuggu maqan yahay shay raran oo uu soo jeediyo amar la taaban karo si loo rakibo waxyaabaha lagama maarmaanka ah debuginfo xirmo via dnf. Waxaad si fudud u socodsiisaa wixii lagu taliyey dnf debuginfo-install ... amar, xaqiiji marka la weydiisto, nidaamkuna wuxuu soo qaataa oo rakibaa xirmooyinka calaamadaha ee loo baahan yahay kalfadhigaaga.
Haddii tilmaamo toos ah aan la heli karin, waxaad gacanta ku aqoonsan kartaa debuginfo-ga loo baahan yahay adiga oo helaya faylka binary ama maktabadda oo wata qalab ay ka mid yihiin locate ka dibna weydiiya xogta RPM. The locate amarku wuxuu ka yimaadaa mlocate xirmo, oo laga yaabo inaad u baahato inaad rakibto oo aad bilowdo, marka aad hesho jidka, waxaad waydiin kartaa xirmada ay leedahay ka dibna rakibi kartaa nooca khaladaadka ee u dhigma.
Waxaa jira xaalado xirmada ku rakibtay binary la siiyay aan la go'aamin karin, tusaale ahaan marka faylka gacanta lagu koobiyeeyay ama lagu dhisay meel aan baakad lahayn. Xaaladahaas, waxaa laga yaabaa inaad u baahato inaad dib ugu dhacdo faylalka summada caadiga ah ama, haddii ay suurtagal tahay, dib u dhis binary-ga laftaadu -g loo sahlay si GDB ay u hesho xogta khaladka oo dhan.
Xasuusnoow in ku rakibida debuginfo maktabad kasta ee nidaamka ay tahay dhif lagama maarmaan ah oo ay noqon karto khasaare. Diirada saar cutubyada aadka u khuseeya arrintaada: dalabkaaga binaries iyo maktabadaha gaarka ah ee ay shilka ama dabeecadda khaldani asal ahaan ka soo jeedo, intii aad u soo jiidi lahayd xirmooyinka cilladaha ee OS oo dhan.
Isticmaalka GDB ee qaladka isdhexgalka ee Linux
GDB waa aaladda udub dhexaad u ah ciribtirka codsiyada C iyo C++ ee Linux, soona bandhigta labadaba khadka-taliska iyo, iyada oo la adeegsanayo isku-dhafka, garaafyada hore-ku-dhammayo sida CDT Eclipse. On Red Hat Enterprise Linux, qaybinta caadiga ah waxaa ka mid ah GDB-ga si buuxda leh oo ay weheliso GUIs ikhtiyaari ah.
Si aad u saxdo barnaamijka bilawga, waxaad caadi ahaan u yeedhaa gdb ./program, habee meelaha jabinta hadba sida loogu baahdo, ka dibna ku billow fulinta gudaha GDB adigoo isticmaalaya run amar Haddii kale, waxaad ku dhejin kartaa barnaamij horeba ula socday gdb -p <pid> ama adigoo bilaabaya GDB oo isticmaalaya attach ku amar oo ay la socdaan aqoonsiga habsocodka.
Haddii GDB aysan qiyaasi karin bartilmaameedka lagu fulin karo PID inta lagu jiro lifaaqa, waxaad si cad ugu sheegi kartaa binary-ga loo isticmaalo file amar ka dibna sii wad si aad u saxdo. Tani waxay si gaar ah faa'iido u leedahay marka aad la macaamilayso soo-saareyaasha gaarka ah, qoraallada duuban ama habaynta-binary-ga badan halkaasoo waddada dhabta ah ee la fulin karo aysan muuqan.
Marka lagu xiro ama la bilaabo, waxaad xakameyneysaa socodka barnaamijka oo leh amarro sida n (ku xiga), s (tallaabo), until, finish iyo si fudud c (sii wad), inta aad ka baxayso qalabka wax ka beddelka ah oo leh q marka la sameeyo. Mid kasta oo ka mid ah amarradan wuxuu leeyahay tabo gaar ah oo ku saabsan haddii ay u tallaabsato hay'adaha shaqada, ay socdaan illaa xariiq la bixiyay ama ay dib u bilaabayso fulinta illaa meesha goynta ama joojinta xigta.
Si loo fahmo gobolka, GDB waxay bixisaa amarada is dhexgalka qani ah si loo eego doorsoomayaasha, wac xirmooyinka, diiwaanada iyo in ka badan, iyo sidoo kale waxay bixisaa caawimo macnaha guud iyada oo loo marayo help info iyo amarrada la midka ah. Waxaad ku tusi kartaa khadka isha ee hadda jira list, ku daabac doorsoomayaasha print, ku sahamiso xargaha la isku dhejiyay backtrace oo ku dhex mari xayndaabyada frame, up iyo down.
Goobaha go'doominta, goobaha ilaalinta iyo xaaladaha GDB
Marka lagu jiro qaladka aduunka dhabta ah, ku dhawaad waligaa si indho la'aan ah ugama talaabsanayso main(); bedelkeeda, waxaad si istiraatijiyad ah u dhigtaa meelaha jabinta si aad u joojiso barnaamijka si sax ah halka habdhaqanku uu noqdo mid xiiso leh. Amarka caadiga ah break Waxay kuu oggolaaneysaa inaad dejiso meelaha jabinta faylka iyo lambarka khadka ama magaca shaqada, GDB waxay joojin doontaa fulinta garaacista xigta.
Tusaale ahaan, waxaad dejin kartaa meel goynta khad il gaar ah adoo isticmaalaya syntax sida break file.cpp:123, ama jebi bilowga shaqo leh break my_function. Marka la gaadho goobta cidhiidhiga ah, GDB waxay hakisaa barnaamijka, waxay kuu ogolaanaysaa inaad hubiso doorsoomayaasha maxalliga ah, hubi kaydka wicitaanka oo go'aanso inaad soo gasho, ka gudubto ama aad sii waddo.
Baraha shuruudaha leh waa kuwo qiimo leh marka cillad soo baxdo oo keliya ka dib markii la sameeyo dhowr jeer ama qiimayaal gaar ah oo la geliyo. Waxaad ku xidhidhi kartaa xaalad Boolean ah oo ku qoran C ama C++ meel jabin ah si GDB kaliya u istaagto marka xaaladdu ku qiimayso run, si aad ah u yaraynaysa joogsiyada aan loo baahnayn iyo samaynta wareegyada cilladaha ama mishiinnada adag ee gobolka si aad u hufan.
Si loola socdo isbeddelada xogta halkii ay ka ahaan lahayd qulqulka koodka, GDB waxa ay soo bandhigtaa bar-eegayaal, kuwaas oo kiciya marka muujinta (badanaa doorsoome) laga akhriyo ama loo qoro. Iyadoo amarrada sida watch, rwatch (akhri) ama awatch (akhri/qor), waxaad joojin kartaa fulinta si sax ah marka goob gaar ah wax laga beddelo ama la galo, taas oo si gaar ah waxtar u leh raadinta isbeddellada gobolka ee lama filaanka ah.
Waxaad ku maamushaa dhammaan meelaha jabinta iyo meelaha laga warhayo adoo adeegsanaya amarada sida info breakpoints or info br, oo waxaad ku tirtiri kartaa lambarka ama goobta adoo isticmaalaya delete oo leh doodo ku habboon. Tani waxay sahlaysaa in la ilaaliyo nadiif ah meelaha jabinta firfircoon lagana ilaaliyo jahawareerka marka la saxayo qaybo badan ama fadhiyo.
Dejinta habsocodyo badan oo taxan iyo fargeeto ah
Hagaajinta barnaamijyada C iyo C++ ee si ballaaran u isticmaala mowduucyada ama fargeetooyinka waxay u baahan tahay wacyigelin dheeraad ah oo ku saabsan sida GDB ula socoto xaaladaha fulinta. Sida caadiga ah, GDB waxay u qoondaysaa dunta hadda jirta oo amarrada intooda badani waxay ku shaqeeyaan duntaas ilaa aad si cad u beddelato isticmaalka thread iyo aqoonsiga dunta.
Marka barnaamijkaagu fargeeto, dejinta set detach-on-fork ayaa go'aamisa in GDB ay raacdo ubadka ama waalidka iyo sida ay u maamusho nidaamka aan la raacin. Waxaad u habayn kartaa GDB midkood si aad u ilaaliso labadaba ama aad dhinac uga goosato si toos ah, iyadoo ku xidhan haddii waalidka, ilmaha ama labadaba ay khusayso falanqayntaada.
Noocyo cusub oo GDB ah ayaa u xuubsiibtay habka dunta loo tiriyo, iyagoo soo bandhigaya aqoonsiga dunta hoose oo ay la socoto aqoonsi duneed oo gaar ah si loogu waafaqo. Doorsoome ku habboonaanta $_thread iyo Python API's InferiorThread.num Hadda ka tarjumi mid kasta oo ka hooseeya nambarada, halka aqoonsiga caalamiga ah lagu heli karo iyada oo loo marayo $_gthread iyo InferiorThread.global_num, hubinta qalabaynta duugga ah ee ku salaysan aqoonsiga caalamiga ah inay sii shaqaynayso.
Xakamaynta ishaarada ee wax ka-hortagga-xadhkaha badan ayaa sidoo kale la hagaajiyay si calaamadaha mar walba loo geeyo dunta saxda ah. Haddii aad beddesho dunta ka dib marka calaamaduhu istaago barnaamijka ka dibna isku day inaad sii waddo, GDB waxay waydiisan kartaa xaqiijin, ka hortagga khaladka shilalka iyo samaynta cilladaha la xidhiidha calaamadaha mid la isku halleyn karo.
Waxaas oo dhami waxay ka dhigan tahay marka la falanqeynayo xirmooyinka dhimanaya, jinsiyadaha ama shilalka calaamada la yaabka leh, waxaad ku tiirsanaan kartaa qaabka dunta GDB si aad ula socoto dariiqa fulinta saxda ah iyadoo la xakameynayo saxda ah. Marka lagu daro meelaha jabinta, meelaha saacadaha iyo meelaha la qabto, tani waxay awood u siinaysaa qaladka xad-dhaafka ah ee adag xitaa adeegyada C++ ee aadka isku xidhan.
Nidaamka baafinta iyo wicitaannada maktabadda: strace, ltrace iyo SystemTap
Mararka qaarkood sida ugu dhaqsiyaha badan ee lagu fahmi karo sababta barnaamijka C ama C++ u dhaqmo si xun ma ahan in la soo maro khad kasta, balse waa in la fiiriyo sida uu ula falgalo nidaamka hawlgalka iyo maktabadaha la wadaago. Linux waxa ay siisaa dhowr qalab oo awood badan tan: strace, ltrace, SystemTap iyo xitaa GDB lafteeda iyada oo loo marayo meelo gaar ah.
The strace Nidaamka raadraaca utility wuxuu wacaa - isdhexgalka kernel-ka sida open, read, write, mmap, execve iyo wixii la mid ah — oo ay la socdaan cabbiraaddooda iyo qiyamkooda soo celinta. Waxaad ku socodsiin kartaa barnaamijkaaga strace ama ku lifaaq nidaamka socodsiinta PID, iyada oo si ikhtiyaari ah u shaandhaysa syscalls si loo muujiyo iyada oo la adeegsanayo tibaaxaha sida -e trace=call iyo in la xakameeyo in la raacayo carruurta fargeetada ama dunta la isku xidho -f.
Sababtoo ah arjiyada dhabta ahi waxay soo saaraan tiro aad u badan oo ah wicitaanada nidaamka, isku darka strace oo leh qalabka qolofka sida tee waa wax caadi ah in labadaba si toos ah u eegaan wax soo saarka oo u kaydiyaan falanqaynta. Tani waxay kaa caawinaysaa inaad aqoonsato faylasha maqan, dhibaatooyinka ogolaanshaha, habdhaqanka shabakada lama filaanka ah ama arrimo kale oo heer OS ah oo laga yaabo inaysan ka muuqan koodka laftiisa.
Xarig dhammaystiran, ltrace diiradda saartaa wicitaanada hawlaha maktabadda la wadaago ee booska isticmaalaha, tusinaya baryada iyo soo celinta qiyamka shaqooyinka laga dhoofiyo walxaha firfircoon. Dhanka RHEL 8 waxaa jira xaddidaad la yaqaan oo meesha aysan ka heli karin nidaamyada qaarkood ee la fulin karo, laakiin waxay si caadi ah ugu shaqeysaa adeegsadaha-lagu dhisay, taasoo ka dhigaysa aalad qiimo leh oo lagu fahmo sida barnaamijkaagu u isticmaalo API-yada maktabadda.
SystemTap waa qaab raadin aad u horumarsan oo u ogolanaya hawl wadeenada dhacdooyinka kernel iyo goobta isticmaale labadaba iyagoo isticmaalaya luqaddeeda qoraal. Way ka adag tahay in la isticmaalo marka loo eego strace ama ltrace laakiin miisaankeedu wuu ka fiican yahay oo waxay taageertaa shaandhaynta iyo isku-darka casriga ah. Si loo fududeeyo, qoraal muunad ah ayaa loo yaqaan strace.stp maraakiibta leh SystemTap si ay ugu ekaysiiyaan hab-dhaqanka strace-ka ah iyaga oo isticmaalaya kaabayaasha SystemTap.
GDB lafteedu waxay ka qaybqaadan kartaa raadinta iyada oo u adeegsata meelaha la qabto ee sysscalls iyo calaamadaha, iyada oo loo marayo amarada sida catch syscall iyo catch signal. Kuwani waxay sababaan cilladaha inuu joojiyo fulinta mar kasta oo barnaamijku sameeyo wicitaanno nidaamyo gaar ah ama uu helo calaamado gaar ah, kuwaas oo aad u anfacaya marka aad u baahato kontorool-khafiif ah inta lagu jiro cilladaha isdhexgalka.
Qashin-qubka muhiimka ah iyo ka-hortagga-dhigidda dhimashada ee GDB
Marka codsiga C ama C++ uu shil galo ama u laadlaado hab ay adag tahay in si is dhexgal ah loo soo saaro, qashin-qubka xudunta u ah ayaa bixiya sawir xusuustiisa iyo xaaladiisa wakhtiga muhiimka ah. Qubitaanka xudunta u ah waa faylka ELF oo ka kooban waxyaabaha ku jira qaybo ka mid ah xusuusta habka (xakamaynta, taallo, khariidadaha) marka la joojiyo, taas oo aad hadhow ku falanqayn karto GDB sidii adigoo ku lifaaqan wakhtiga shilka.
Si aad u isticmaasho qashinka xudunta u ah si wax ku ool ah, waa in aad hubisaa in ay dhab ahaantii abuurmeen oo aan lagu xidhin xadka khayraadka ama qaabaynta. Xadka qolofka sida ulimit -c waxay ka hortagi kartaa in faylasha asaasiga ah la abuuro; dejinta xadka unlimited waxay ka saartaa koofiyadaha cabbirka, inkasta oo ay tahay inaad dib u eegto saamaynta booska diskooga ee nidaamyada wax soo saarka.
Nidaamyada casriga ah ee RHEL, systemd-coredump waxay si hufan u maamushaa qashinka xudunta u ah oo ku kaydisa meel dhexe oo joornaal u eeg halkii aad ka bixi lahayd core faylasha ku kala firirsan hagayaasha. The coredumpctl Qalabku wuxuu kuu ogolaanayaa inaad taxdo shilalka la duubay, kormeerto xogtooda badan iyo dhoofinta faylka dhabta ah ee dhabta ah si aad u doorato dariiqa la doortay ee falanqaynta qoto dheer.
Marka la abuurayo qulqulka shaqada qabsashada shil nidaamsan, waa wax caadi ah in la rakibo sos xirmo iyo isticmaal sosreport si loo dhaliyo daamur leh habaynta nidaamka iyo logyada. Marka lagu daro feylka xudunta ah ee la dhoofiyo iyo binaries codsiga, tani waxay ku siinaysaa wax kasta oo loo baahan yahay si loo falanqeeyo shilalka mashiinka gaar ah ama u dhiibo koox kale ama iibiye.
Xitaa waxaad si ula kac ah u kicin kartaa qub-qulqulka asaasiga ah ee habka aan jawaab-celinta lahayn adiga oo u soo diraya signalka ilmo soo rididda ama isticmaalaya qalabyada sida gcore, kaas oo daadiya xusuusta habka inta ay wali socoto. Inta lagu jiro a gcore daadinta, habsocodku si kooban ayuu u hakiyaa, ka dibna dib ayuu u bilaabayaa fulinta caadiga ah, taas oo awood u siinaysa falanqaynta khadka tooska ah ee xaalad dhibaato leh iyada oo aan si buuxda loo joojin adeegga.
Helitaanka saxda ah ee la fulin karo iyo calaamadaha falanqaynta asaasiga ah
Si loo falanqeeyo qashin qubka xudunta u ah si macno leh, GDB waxay u baahan tahay faylka ubucda ah iyo kan saxda ah ee la fulin karo (oo lagu daray maktabado kasta oo la wadaago) oo soo saaray. Tani waa muhiim sababta oo ah binary-ga oo laga soo dhisay noocyo kala duwan—waxay u horseedi kartaa dib-u-dhac marin habaabin ah iyo qaabayn doorsoomayaal khaldan.
Qalabka sida coredumpctl info Tus xog badan oo faahfaahsan mid kasta oo xudunta la qabto, oo ay ku jirto dariiqa loo maro kan ugu weyn ee la fulin karo iyo aqoonsi dhisme oo si gaar ah u tilmaamaya binary-ga. Aqoonsiga dhismuhu wuxuu u ekaan karaa xashiish hexadecimal dheer, oo waxaad barbar dhigi kartaa aqoonsiga dhismaha nuqulka deegaankaaga ee binary si aad u hubiso inay isku mid yihiin ka hor inta aanad bilaabin GDB.
Haddii la fulin karo iyo maktabadaheedu ay ka yimaadeen xirmooyinka RPM, waad isticmaali kartaa sosreport iyo keydka xogta xirmada si loo soo saaro noocyada saxda ah ee loo baahan yahay. Xaaladaha qaarkood, waxaad xitaa dib ugu dhejin kartaa baakadaha u dhigma mishiinka cilladaha ee gaarka ah ka dibna isticmaal GDB's set sysroot qaabeynta si loogu tilmaansado qaabeynta maktabadda muraayadda ah ee qaladka-qaabka fog.
Markaad haysato walxaha saxda ah, waxaad bilaabaysaa fadhiga GDB oo wata amar sida gdb /path/to/exe /path/to/core GDBna ha soo geliyo xudunta. Haddii debuginfo ka maqan yahay qayb kasta, GDB waxay soo bandhigi doontaa farriimaha tilmaamaya xirmooyinka ama faylalka summada ah ee ay tahay inaad rakibto si aad u hesho muuqaal buuxa oo calaamad ah.
Haddii calaamadaha cilladaha codsigaaga lagu bixiyo faylal kala duwan halkii laga isticmaali lahaa baakooyinka, waxaad si cad ugu shuban kartaa adigoo isticmaalaya symbol-file amarka gudaha GDB. Qasab kuguma aha inaad hayso macluumaadka khaladka ee maktabad kasta oo la wadaago ee xudunta u ah; Diirada saarista codsigaaga iyo maktabadaha laga shakisan yahay ayaa inta badan ku filan dib u dhiska xirmada iyo gobolka khuseeya.
Marka la falanqeynayo qashin qubka xudunta u ah, xasuusnoow in amarrada lagu xakameynayo fulinta barnaamijka (sida tallaabo ama sii wad) aysan macno sameyneynin, sababtoo ah ma jiro nidaam toos ah oo ku lifaaqan. Taa baddalkeeda, waxaad ku tiirsan tahay amarada kormeerka-baaritaanka xirmooyinka xirmooyinka, doorsoomayaasha maxalliga ah iyo kuwa caalamiga ah, gobollada xusuusta iyo dunta-si aad u ogaato sababta shilku u dhacay ama halka uu barnaamijku ku xayirmay.
Xaaladaha xusuusta-qashin-qubka ee horumarsan iyo isbeddellada GDB ee RHEL casriga ah
Codsiyada amniga sare leh ama waxqabadka sare leh qaarkood waxay qaybo ka mid ah xasuustooda u calaamadeeyaan inaan la tuuri karin iyagoo adeegsanaya calamo sida VM_DONTDUMP, taas oo ka hortagaysa in xusuustaas lagu qoro faylalka asaasiga ah. Tani waxay ilaalinaysaa xogta xasaasiga ah (tusaale, furayaasha cryptographic ama diiwaannada maaliyadeed) waxayna yaraynaysaa cabbirada qashinka, laakiin waxay sii adkeynaysaa falanqaynta khadka tooska ah ee buuxa.
Haddii aad baahi xooggan u qabto inaad qabsato wax kasta- oo ay ku jiraan meelaha sida caadiga ah laga saaro qashinka-waxaad u habayn kartaa GDB si aad u iska indho-tirto calanka aan la tuurin oo aad ku qasabto daadinta xusuusta dhamaystiran. GDB waxay ku siinaysaa ikhtiyaarada lagu burin karo VM_DONTDUMP oo ku tuur dhammaan xusuusta habka faylka udub dhexaadka ah ee dembi-baadhista ama khaladka qotodheer.
Dhinaca qalabaynta, nooca GDB ee lagu soo raray RHEL 8 waxa uu soo bandhigayaa tiro jebin iyo dhaqan beddela marka la barbar dhigo RHEL 7, gaar ahaan meelaha ay dadku ku qiyaasi jireen wax soo saarkeeda dhamaadka. Halkii la xoqi lahaa wax soo saarka qoraalka, Koofiyada Cas ayaa ku talinaya qorista qoraallada iyadoo la adeegsanayo GDB's Python API ama borotokoolka Mashiinka Interface (MI), labadaba waxaa loogu talagalay isticmaalka barnaamijka.
Isbeddellada la taaban karo waxaa ka mid ah GDBserver oo bilaabaya kuwa hoose iyada oo loo marayo qolof si ay u oggolaato balaadhinta dooda, ka saarista taageerada GCJ (Java), la cusboonaysiiyay amarrada dayactirka calaamadda qashinka iyo hagaajinta maaraynta sysroot si ay si fiican u taageerto cilladaha fog. Qaar ka mid ah amarada iyo hababka, sida waafaqsanaanta HP-UX XDB iyo remotebaud, waa laga fariistay ama lagu bedelay wax u dhigma oo badan sida set serial baud.
Intaa waxaa dheer, GDB waxay soo bandhigtay xadka sida max-value-size si looga hortago qoondaynta xusuusta aan xadka lahayn marka la daabacayo qiyamka aadka u weyn, bedelay sida cabbirka taariikhda amarka loo xakameeyo GDBHISTSIZE halkii HISTSIZE, oo ku daray xad ku saabsan dhamaystirka musharaxiinta iyada oo loo marayo set max-completions. Ilaaladani waxay kaa caawinayaan inaad iska ilaaliso baraf ama isticmaalka xusuusta xad dhaafka ah marka la ciribtirayo borogaraamyada cudur-sidaha ama kharriban.
Saamaynta saafiga ah ee horumarinta C iyo C++ ee Linux waa ka sii xoog badan, debugger qoraal ah oo cabbiraya saldhigyo kood weyn iyo xaalado guuldarro la yaab leh, waa haddii aad ka warqabto amarrada la cusboonaysiiyay iyo guntooyinka qaabeynta. Marka lagu daro kaabayaasha isku-darka casriga ah sida GCC iyo Clang/LLVM (iyo bixinta sida IBM Open XL C/C++ on Power), GDB waxay samaysaa laf-dhabarta silsilad qalabeed oo awood leh oo loogu talagalay horumarinta iyo cilad-saarka software-ka adag ee asalka u ah Linux.
Doorashada iskudubarid sax ah iyo IDE, awood u siinaya DWARF macluumaadka debug iyo rakibida xirmooyinka debuginfo, iyo ka faa'iidaysiga GDB, strace, ltrace, SystemTap iyo core-dump workflows ku siinayaa Linux C / C ++ jawi degdeg ah, hufan oo ku haboon backends ugu weyn, xataa haddii aad aragti ugu horeysay ee V.S. Iyada oo qaabeynta saxda ah iyo wacyigelinta qalabka la heli karo, ka saarista Linux kaliya kuma eka raaxada Visual Studio ee Windows; Xaalado badan, waxay dhab ahaantii ku siinaysaa kontorool fiican iyo muuqaal qoto dheer oo ku saabsan sida codsiyada C iyo C++ ay runtii u dhaqmaan.