تصحيح كود C/C++ باستخدام GDB

تصحيح كود C/C++ باستخدام GDB

نشر بواسطة Mostafa Othman | برمجة , تقنيات برمجية , ادوات برمجة , لغة c/c++ ,

18 تشرين الثاني 2024

تصحيح كود C/C++ باستخدام GDB

 

الفهرس

  1. مقدمة
  2. إعداد GDB
  3. أوامر GDB الأساسية
  4. نقاط التوقف ونقاط المراقبة
  5. فحص المتغيرات والتعبيرات
  6. التحكم في تنفيذ البرنامج
  7. تحليل إطارات المكدس (Stack Frames)
  8. تقنيات متقدمة
  9. الخاتمة
  10. المراجع

 

1. مقدمة

يُعد GNU Debugger (GDB) أداة قوية توفر بيئة غنية لتصحيح أخطاء تطبيقات C/C++. يسمح GDB للمطورين بتحليل تدفق البرنامج، فحص المتغيرات، إعداد نقاط التوقف، والتنقل خطوة بخطوة في الشيفرة، مما يجعل اكتشاف الأخطاء وتصحيحها أكثر سهولة. في هذا المقال، سنستعرض الميزات والتقنيات الرئيسية في GDB، بدءًا من الأوامر الأساسية وحتى استراتيجيات التصحيح المتقدمة.

2. إعداد  GDB

قبل البدء في التصحيح، تأكد من تثبيت GDB. يمكن تثبيته في معظم أنظمة Linux باستخدام الأمر التالي:

sudo apt-get install gdb
تجميع الشيفرة مع تضمين رموز التصحيح

لاستخدام ميزات التصحيح في GDB، قم بتجميع شيفرة C/C++ باستخدام الخيار -g. يضيف هذا الخيار رموز التصحيح، مما يسمح لـ GDB بربط الكود المترجم بالكود المصدر:

gcc -g -o my_program my_program.c   # For C
g++ -g -o my_program my_program.cpp # For C++

3. أوامر GDB الأساسية

لبدء التصحيح، استخدم الأمر:

gdb ./my_program

بعد تشغيل GDB، يمكنك استخدام الأوامر التالية:

  • run: يبدأ تشغيل البرنامج.
  • quit: يخرج من GDB.
  • help: يعرض مساعدة لأوامر GDB.
(gdb) run

سيؤدي هذا إلى تنفيذ برنامجك حتى يكتمل أو يتوقف عند خطأ.

4. نقاط التوقف ونقاط المراقبة

نقاط التوقف (Breakpoints) ونقاط المراقبة (Watchpoints) ضرورية للتحكم في تنفيذ البرنامج في GDB.

إعداد نقاط التوقف

نقطة التوقف توقف تنفيذ البرنامج عند موضع معين. يمكنك إعداد نقاط التوقف عن طريق تحديد رقم السطر أو اسم الدالة:

(gdb) break main            # Set breakpoint at the start of main()
(gdb) break my_function     # Set breakpoint at a specific function
(gdb) break my_file.c:10    # Set breakpoint at line 10 in my_file.c
إعداد نقاط التوقف المشروطة

نقاط التوقف المشروطة توقف التنفيذ عند تحقيق شرط معين:

(gdb) break 42 if (x == 10) # Break at line 42 if x is 10
نقاط المراقبة

نقاط المراقبة مفيدة لمراقبة المتغيرات. عند تغيير قيمة المتغير، يوقف GDB التنفيذ:

(gdb) watch my_variable     # Set a watchpoint on my_variable

5. فحص المتغيرات والتعبيرات

فحص المتغيرات جزء أساسي من التصحيح، ويقدم GDB عدة أوامر للقيام بذلك.

عرض المتغيرات

استخدم الأمر print للتحقق من قيمة المتغيرات:

(gdb) print my_variable     # Print the current value of my_variable
عرض التعبيرات

يمكنك أيضًا طباعة التعبيرات أو القيام بالحسابات:

(gdb) print my_variable + 10
(gdb) print my_array[5]
مراقبة التغييرات في المتغيرات

الأمر display يقوم بتحديث قيمة المتغير تلقائيًا بعد كل خطوة:

(gdb) display my_variable

6. التحكم في تنفيذ البرنامج

يوفر GDB عدة أوامر للتحكم في تدفق تنفيذ البرنامج.

التقدم خطوة بخطوة في الشيفرة

  • next: يتقدم إلى السطر التالي، متجاوزًا استدعاءات الدوال.
  • step: يدخل في الدوال، مما يسمح بفحص تفصيلي.
(gdb) step   # Step into function
(gdb) next   # Step over function
متابعة التنفيذ

استخدم continue لاستئناف التنفيذ بعد الوصول إلى نقطة توقف:

(gdb) continue
التشغيل حتى سطر معين

الأمر until يستأنف التنفيذ حتى الوصول إلى سطر محدد:

(gdb) until 20   # Continue until line 20

7. تحليل إطارات المكدس

يقدم GDB أدوات لفحص مكدس الاستدعاءات، وهو أمر حاسم عند تصحيح أخطاء الدوال واستدعاءات التكرار.

عرض مكدس الاستدعاءات

الأمر backtrace يعرض مكدس الاستدعاءات، مما يظهر سلسلة الاستدعاءات التي أدت إلى نقطة التنفيذ الحالية:

(gdb) backtrace

يمثل كل إطار في مكدس الاستدعاءات استدعاء دالة، ويمكنك التنقل بين الإطارات باستخدام الأمر frame:

(gdb) frame 2     # Select frame 2

8. تقنيات متقدمة

إلى جانب الأساسيات، يقدم GDB أدوات قوية يمكن أن تعزز تجربة التصحيح.

أوامر مخصصة

يسمح GDB بإنشاء أوامر مخصصة للمهام المتكررة. لتعريف أمر مخصص، استخدم define:

define my_custom_command
   print my_variable
   continue
end
البرمجة الآلية

يدعم GDB البرمجة باستخدام بايثون لمهام التصحيح المعقدة، مما يتيح كتابة نصوص برمجية لأتمتة العمليات وتحليل الشيفرة وإخراج النتائج.

التصحيح عن بُعد

يدعم GDB التصحيح عن بُعد، مما يسمح بتصحيح كود يعمل على جهاز أو نظام مختلف. ابدأ GDB باستخدام الخيار --remote واتصل بالبرنامج البعيد عبر gdbserver.

9. الخاتمة

يعد GDB أداة متعددة الاستخدامات وفعالة للمطورين الذين يعملون على C/C++، مما يتيح فحصًا تفصيليًا لسلوك البرنامج، والتحكم المرن في التنفيذ، ومجموعة غنية من الأدوات لتصحيح الأخطاء المعقدة. سواء كنت مبتدئًا في التصحيح أو مطورًا متمرسًا، فإن إتقان الأوامر والتقنيات الأساسية والمتقدمة لـ GDB يمكن أن يحسن كفاءة التصحيح ويعزز إنتاجيتك البرمجية.

10. المراجع