لینکس میں GNU ڈیبگر کا استعمال کیسے کریں۔

GNU Debugger کا استعمال کسی پروگرام کو ڈیبگ کرنے، کریش کا تجزیہ کرنے، یا یہ دیکھنے کے لیے کیا جاتا ہے کہ پروگرام کسی خاص مقام پر کیا کرتا ہے۔ اسے 1980 کی دہائی میں GNU پروجیکٹ نے تیار کیا تھا اور یہ سب سے زیادہ استعمال ہونے والے کمانڈ لائن ڈیبگرز کے ساتھ ساتھ سب سے مشہور GNU سافٹ ویئر میں سے ایک رہا ہے۔

آئیے پہلے ایک چھوٹا سی پروگرام لکھیں جسے ہم پھر ڈیبگ کریں گے۔ شروع کرنے کے لیے، ایک نیا بنائیں .c فائل کا استعمال کرتے ہوئے vim یا آپ کی پسند کا کوئی ایڈیٹر:

vim test.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) مدد کمانڈز کی کلاسز کی فہرست: عرفی نام -- دیگر کمانڈز کے بریک پوائنٹس -- پروگرام کو مخصوص پوائنٹس پر روکنا -- ڈیٹا فائلوں کی جانچ کرنا -- فائلوں کے انٹرنل کی وضاحت اور جانچ کرنا -- مینٹیننس کمانڈز غیر واضح -- غیر واضح خصوصیات چل رہی ہیں -- پروگرام اسٹیک کو چلانا -- اسٹیک سٹیٹس کی جانچ کرنا -- سٹیٹس انکوائریز سپورٹ -- سپورٹ سہولیات ٹریس پوائنٹ -- پروگرام کو روکے بغیر پروگرام کی عمل آوری کا سراغ لگانا صارف کی طرف سے بیان کردہ -- صارف کی وضاحت کردہ کمانڈز "مدد" ٹائپ کریں جس کے بعد کلاس کا نام آتا ہے۔ اس کلاس میں کمانڈز کی فہرست کے لیے۔ تمام کمانڈز کی فہرست کے لیے "help all" ٹائپ کریں۔ مکمل دستاویزات کے لیے کمانڈ کے نام کے بعد "مدد" ٹائپ کریں۔ "لفظ" سے متعلق کمانڈز تلاش کرنے کے لیے "apropos word" ٹائپ کریں۔ اگر غیر واضح ہو تو کمانڈ کے نام کے مخففات کی اجازت ہے۔

اس کے بعد آپ ٹائپ کر سکتے ہیں۔ help class_name اس کلاس سے تعلق رکھنے والے کمانڈز کو دیکھنے کے لیے۔ ذیلی اسٹرنگ کا استعمال کرتے ہوئے کمانڈز کو تلاش کرنے کے لیے، استعمال کریں۔ apropos substring.

جب پروگرام کسی فنکشن میں داخل ہوتا ہے تو بریک پوائنٹ سیٹ کرنے کے لیے، رن:

$(gdb) بریک مین

یہاں ہم اپنے کوڈ کے واحد فنکشن پر بریک پوائنٹ سیٹ کرتے ہیں، یعنی مرکزی. کمانڈ استعمال کریں۔ رن پروگرام کو اگلے بریک پوائنٹ تک، یا باہر نکلنے تک چلانے کے لیے۔

$(gdb) چلائیں۔

فنکشن میں کسی خاص مقام پر بریک پوائنٹ سیٹ کرنے کے لیے، استعمال کریں:

بریک *مین + 4

یہ فنکشن مین کی چوتھی لائن پر ایک بریک پوائنٹ قائم کرے گا۔

ابھی، پروگرام کے بہاؤ کو اگلی کوڈ لائن تک لے جانے کے لیے، بس چلائیں قدم کمانڈ.

$(gdb) مرحلہ 5: فلوٹ f = 5.5؛

متغیر کے مواد کو ظاہر کرنے کے لیے، رن ڈسپلے .

$(gdb) ڈسپلے i 6: i = 5

متغیر کے مواد میں ترمیم کرنے کے لیے، جس کی ضرورت کسی پروگرام کے رن کو متغیر کی مخصوص اقدار کے تحت چلانے کے لیے ہوسکتی ہے۔ متغیر مقرر کریں = اظہار.

$(gdb) سیٹ متغیر i=10 $(gdb) ڈسپلے i 7: i = 10

یہاں، 'اظہار' کوئی بھی درست (ریاضی / منطقی) اظہار ہوسکتا ہے۔ سادگی کی خاطر ہم صرف ایک اور قدر (10) متغیر کو تفویض کرتے ہیں۔ میں.

پروگرام کے لیے اسمبلی کوڈ پرنٹ کرنے کے لیے، کمانڈ استعمال کریں فنکشن کا نام جدا کرنا:

صرف استعمال کریں۔ جدا کرنا پورے پروگرام کے لیے اسمبلی کوڈ پرنٹ کرنے کے لیے۔ اسمبلی کوڈ میں ایک خاص لائن پر تیر کو نوٹ کریں۔ یہ بتاتا ہے کہ ڈیبگنگ سیشن فی الحال اس مخصوص میموری والے مقام پر روک دیا گیا ہے (یعنی، کوڈ کی وہ لائن)۔

کوڈ کی ایک خاص لائن پر ڈیبگر کو چھلانگ لگانے کے لیے، رن:

$(gdb) jump *main + 2 0x400528 پر جاری ہے۔ بریک پوائنٹ 2، 0x000000000040052a in main () test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

اس سے ڈیبگر فنکشن میں کوڈ کی دوسری لائن کے میموری لوکیشن پر چھلانگ لگا دے گا۔ مرکزی. نوٹ کریں کہ یہاں میں مین کے آغاز سے براہ راست دوسرے مقام پر چھلانگ لگاتا ہوں۔ لہذا، متغیر میں کبھی بھی سیٹ نہیں کیا گیا تھا، جس کے نتیجے میں ڈیبگر پھینکنے کی غلطی ہوتی ہے کہ وہ متغیر کے پتے پر میموری کے مواد تک رسائی حاصل نہیں کر سکتا میں.

یہ کچھ بنیادی کمانڈز ہیں جو آپ کو لینکس میں قابل عمل فائل کو ڈیبگ کرنے کے ساتھ شروع کرنے میں مدد کر سکتی ہیں۔ ہم امید کرتے ہیں کہ آپ کو اس صفحہ پر معلومات مفید معلوم ہوں گی۔