Linuxలో GNU డీబగ్గర్ ఎలా ఉపయోగించాలి

GNU డీబగ్గర్ ఒక ప్రోగ్రామ్‌ను డీబగ్ చేయడానికి, క్రాష్‌ని విశ్లేషించడానికి లేదా నిర్దిష్ట సమయంలో ప్రోగ్రామ్ ఏమి చేస్తుందో చూడటానికి ఉపయోగించబడుతుంది. ఇది 1980లలో GNU ప్రాజెక్ట్ ద్వారా అభివృద్ధి చేయబడింది మరియు ఇది అత్యంత విస్తృతంగా ఉపయోగించే కమాండ్ లైన్ డీబగ్గర్‌లలో ఒకటి మరియు అత్యంత ప్రజాదరణ పొందిన GNU సాఫ్ట్‌వేర్‌లలో ఒకటి.

మనం మొదట చిన్న సి ప్రోగ్రామ్‌ని వ్రాస్దాం, దానిని డీబగ్ చేస్తాము. ప్రారంభించడానికి, కొత్తదాన్ని సృష్టించండి .సి ఫైల్ ఉపయోగించి విమ్ లేదా మీకు నచ్చిన ఏదైనా ఎడిటర్:

విమ్ టెస్ట్.సి

కింది C ప్రోగ్రామ్‌ను సృష్టించండి:

#include int main() {int i = 5; ఫ్లోట్ f = 5.5 i = i + 3; f = f + 2.2; printf("i మరియు f యొక్క విలువ: %d మరియు %f\n", i, f); తిరిగి 0; }

నొక్కండి తప్పించుకో vim కమాండ్ మోడ్‌కి వెళ్లడానికి. అప్పుడు టైప్ చేయండి :wq ప్రోగ్రామ్‌ను సేవ్ చేసి నిష్క్రమించడానికి.

కంపైల్ చేసి, ప్రోగ్రామ్ నడుస్తుందో లేదో చూడండి:

gcc test.c -o test ./test i మరియు f యొక్క విలువ: 8 మరియు 7.700000

ప్రోగ్రామ్‌లో డీబగ్గింగ్ మద్దతును ప్రారంభించడానికి, మేము దానితో కంపైల్ చేస్తాము -గ్రా జెండా. ఫ్లాగ్ ఉపయోగించబడకపోతే, వినియోగదారు పరిమిత ఎంపికలతో అయినప్పటికీ ప్రోగ్రామ్‌ను డీబగ్ చేయవచ్చు.

gcc test.c -g -o పరీక్ష

డీబగ్గింగ్ ప్రారంభించడానికి మా ఎక్జిక్యూటబుల్ ఫైల్ పరీక్ష లో gdb, మేము అమలు చేస్తాము:

gdb పరీక్ష

ఇది తెరుచుకుంటుంది gdb కన్సోల్, ఇక్కడ మీరు టైప్ చేయవచ్చు gdb ఆదేశాలు. ఆదేశాల జాబితాను చూడటానికి దీన్ని ఉపయోగించండి సహాయం ఆదేశం.

$(gdb) సహాయం కమాండ్‌ల తరగతుల జాబితా: మారుపేర్లు -- ఇతర కమాండ్‌ల బ్రేక్‌పాయింట్‌ల మారుపేర్లు -- నిర్దిష్ట పాయింట్ల డేటా వద్ద ప్రోగ్రామ్‌ని ఆపివేయడం -- డేటా ఫైల్‌లను పరిశీలించడం -- ఫైల్స్ ఇంటర్నల్‌లను పేర్కొనడం మరియు పరిశీలించడం -- మెయింటెనెన్స్ కమాండ్‌లు అస్పష్టంగా ఉన్నాయి -- అస్పష్టమైన ఫీచర్‌లు నడుస్తున్నాయి. -- ప్రోగ్రామ్ స్టాక్‌ను రన్ చేయడం -- స్టాక్ స్థితిని పరిశీలించడం -- స్థితి విచారణలు మద్దతు -- మద్దతు సౌకర్యాల ట్రేస్‌పాయింట్లు -- ప్రోగ్రామ్ వినియోగదారు నిర్వచించిన ప్రోగ్రామ్‌ను ఆపకుండా ప్రోగ్రామ్ అమలును గుర్తించడం -- వినియోగదారు నిర్వచించిన ఆదేశాలు "సహాయం" అని టైప్ చేయండి తర్వాత తరగతి పేరు ఆ తరగతిలోని ఆదేశాల జాబితా కోసం. అన్ని ఆదేశాల జాబితా కోసం "అందరికీ సహాయం" అని టైప్ చేయండి. పూర్తి డాక్యుమెంటేషన్ కోసం కమాండ్ పేరు తర్వాత "సహాయం" అని టైప్ చేయండి. "పదం"కి సంబంధించిన ఆదేశాల కోసం వెతకడానికి "apropos word" అని టైప్ చేయండి. అస్పష్టంగా ఉంటే కమాండ్ పేరు సంక్షిప్తాలు అనుమతించబడతాయి.

అప్పుడు మీరు టైప్ చేయవచ్చు సహాయం class_name ఆ తరగతికి చెందిన ఆదేశాలను చూడటానికి. సబ్‌స్ట్రింగ్‌ని ఉపయోగించి ఆదేశాలను శోధించడానికి, ఉపయోగించండి అప్రోపోస్ సబ్‌స్ట్రింగ్.

ప్రోగ్రామ్ ఫంక్షన్‌లోకి ప్రవేశించినప్పుడు బ్రేక్‌పాయింట్‌ను సెట్ చేయడానికి, అమలు:

$(gdb) బ్రేక్ మెయిన్

ఇక్కడ మేము మా కోడ్‌లోని ఏకైక ఫంక్షన్‌లో బ్రేక్‌పాయింట్‌ను సెట్ చేసాము, అనగా. ప్రధాన. ఆదేశాన్ని ఉపయోగించండి పరుగు తదుపరి బ్రేక్‌పాయింట్ వరకు లేదా నిష్క్రమించే వరకు ప్రోగ్రామ్‌ను అమలు చేయడానికి.

$(gdb) అమలు

ఫంక్షన్‌లో నిర్దిష్ట ప్రదేశంలో బ్రేక్‌పాయింట్‌ని సెట్ చేయడానికి, వా డు:

బ్రేక్ * ప్రధాన + 4

ఇది ఫంక్షన్ మెయిన్ యొక్క 4వ లైన్ వద్ద బ్రేక్‌పాయింట్‌ను సెటప్ చేస్తుంది.

ఇప్పుడు, ప్రోగ్రామ్ యొక్క ప్రవాహంపై తదుపరి కోడ్ లైన్‌కి వెళ్లడానికి, కేవలం అమలు అడుగు ఆదేశం.

$(gdb) దశ 5: ఫ్లోట్ f = 5.5;

వేరియబుల్ యొక్క కంటెంట్‌లను ప్రదర్శించడానికి, పరుగు ప్రదర్శన .

$(gdb) ప్రదర్శన i 6: i = 5

వేరియబుల్ యొక్క కంటెంట్‌లను సవరించడానికి, వేరియబుల్, రన్ యొక్క నిర్దిష్ట విలువల క్రింద ప్రోగ్రామ్ యొక్క రన్‌ను విశ్లేషించడానికి ఇది అవసరం కావచ్చు సెట్ వేరియబుల్ = వ్యక్తీకరణ.

$(gdb) సెట్ వేరియబుల్ i=10 $(gdb) డిస్ప్లే i 7: i = 10

ఇక్కడ, 'వ్యక్తీకరణ' ఏదైనా చెల్లుబాటు అయ్యే (అంకగణితం / తార్కిక) వ్యక్తీకరణ కావచ్చు. సరళత కొరకు మనం వేరియబుల్‌కు మరొక విలువ (10)ని కేటాయిస్తాము i.

ప్రోగ్రామ్ కోసం అసెంబ్లీ కోడ్‌ను ప్రింట్ చేయడానికి, కమాండ్ ఉపయోగించండి ఫంక్షన్ పేరును విడదీయండి:

కేవలం ఉపయోగించండి విడదీయండి మొత్తం ప్రోగ్రామ్ కోసం అసెంబ్లీ కోడ్‌ను ప్రింట్ చేయడానికి. అసెంబ్లీ కోడ్‌లోని నిర్దిష్ట పంక్తి వద్ద బాణాన్ని గమనించండి. డీబగ్గింగ్ సెషన్ ప్రస్తుతం నిర్దిష్ట మెమరీ స్థానంలో పాజ్ చేయబడిందని ఇది సూచిస్తుంది (అనగా, ఆ కోడ్ లైన్).

కోడ్ యొక్క నిర్దిష్ట లైన్ వద్ద డీబగ్గర్‌ను జంప్ చేయడానికి, అమలు:

$(gdb) జంప్ *మెయిన్ + 2 0x400528 వద్ద కొనసాగుతోంది. బ్రేక్‌పాయింట్ 2, 0x000000000040052a ప్రధాన ()లో test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

ఇది ఫంక్షన్‌లో కోడ్ యొక్క 2వ లైన్ మెమరీ లొకేషన్ వద్ద డీబగ్గర్ జంప్ చేస్తుంది ప్రధాన. ఇక్కడ నేను ప్రధాన ప్రారంభం నుండి నేరుగా రెండవ స్థానానికి దూకినట్లు గమనించండి. అందువల్ల, వేరియబుల్ i ఎప్పుడూ సెట్ చేయబడలేదు, దీని ఫలితంగా డీబగ్గర్ త్రోయింగ్ లోపానికి దారితీసింది, ఇది వేరియబుల్ చిరునామాలో మెమరీ కంటెంట్‌లను యాక్సెస్ చేయలేకపోతుంది i.

ఇవి Linuxలో ఎక్జిక్యూటబుల్ ఫైల్‌ను డీబగ్గింగ్ చేయడం ప్రారంభించడంలో మీకు సహాయపడే కొన్ని ప్రాథమిక ఆదేశాలు. ఈ పేజీలోని సమాచారం మీకు ఉపయోగకరంగా ఉంటుందని మేము ఆశిస్తున్నాము.