Hunting Bugs With Debugging and Logging

منقول عن أمين صايغ:

ال debugging هو انك توقف البرنامج عند سطر معين في الكود (إيقاف مؤقت) وبتقدر تشوف معلومات عن البرنامج في مكان الوقوف مثل جميع المتغيرات وقيمها، ال parameters وقيمها، ال function اللي نادت على ال function اللي واقف فيها ومتغيراتها، المتغيرات ال global، …
بعد ماوقفت البرنامج ممكن تخليه يكمل طبعا أو ممكن تخليه يشغل سطر كود واحد فقط ويرجع يوقف بعد مايشغل السطر اللي بعده وممكن تشوف كل المعلومات السابقة بالقيم الجديدة.
هذا الشي مفيد جدا لو كان عندك كود كتبته جديد وشايفه صحيح لكن النتيجة غلط ممكن توقف البرنامج عند بداية الكود وتبدأ تمشي سطر سطر لحتى تشوف اين المشكلة.
لو كان في bug في البرنامج بس مابتعرف وينها ال debugging ما ممكن يساعدك يقلك فين ال bug لكن ممكن يساعدك في تقليص عدد الأماكن اللي احتمال يكون فيها المشكلة. يعني انت كمبرمج لازم يكون عندك تصور مبدأي وين ممكن تكون ال bug. بتتفحص الكود بالنظر في البداية في حال كان الخطأ واضح، واذا مابين بتوقف البرنامج عن طريق ال debugging وبتتاكد انه الكود شغال بشكل صحيح. وبتتتقل إلى المكان اللي بعده وهكذا حتى تلاقيها.
لحتى تساوي debugging لازم تشغل البرنامج في وضعية ال debugging ولحتى توقف الكود عند سطر معين لازم تحط breakpoint عند هذا السطر (بيختلف على حسب ال IDE المستخدم، لكن غالبا عن طريق الضغط على المسافة الصغير بين السطر ورقم السطر في ال editor فتظهر نقطة حمراء) وبمجرد انه البرنامج يوصل إلى ال breakpoint يتوقف مباشرة. البيانات عن المتغيرات تظهر في panel اسمها Local أو Watch. والمعلومات عن ال functions في ال panel اسمها Call Stack. أيضا تظهر أزرار أهمها: Continue لمتابعة عمل البرنامج، Step Into أو Step Over لتشغيل السطر التالي والتوقف مباشرة.
اذا كانت ال bug من الصعب انك تحدد المكان مثلا البينات (اللي فيها ال bug) بتنقل في عدة أماكن من الصعب حصرها لحتى تقدر تعملها debugging؛ في هي الحالة ممكن تلجأ إلى ال logging.
ال logging هو انك تساوي log أو print للبيانات في كل الأماكن الحساسة (اللي ممكن تعدل على البيانات وتسبب ال bug) مثلا: لنفترض أنه في رقم لايمكن أن يكون صفر والمشكلة أنه أحيانا بصير صفر وفي كثير أماكن ممكن تعدل على هذا الرقم في أي وقت. هذا النوع من المشاكل صعب تلاقيه بال debugging (لانه الوقت والمكان غير معروف). الحل هو استخدام ال logging بأنه تسوي print للرقم في كل الأماكن اللي ممكن تعدل على الرقم (قبل الكود اللي بعدل الرقم وبعد) بحيث ال output يكون بهذا الشكل:
before doing x: 5
after doing x: 6
before doing y: 6
after doing y: 11
before doing z: 11
after doing z: 0
before doing a: 90
after doing b: 111
بهي الطريقة ظهر مباشرة انه المشكلة في الكود z. الآن بتسخدم ال debugging في هذا الكود لحتى تلاقي المشكلة
بشكل عام كل مازادت خبرتك في البرمجة رح تزداد وتتطور مهارتك وسرعتك في البحث عن الأخطاء ورح تطور أدوات أكثر بتساعدك في تضييق البحث عن الأخطاء المتخفية. ال debugging وال logging تعتبر أهم تقنيتين.

هذا والله أعلم
– أمين صايغ

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *