ما هي أدوات الـ Code Profiling وكيف يمكن استخدامها؟

في أغلب الأوقات، عدم وجود أخطاء في البرنامج لا يعني بالضرورة أنه يعمل بشكل سليم وكفاءة عالية.
فعلى سبيل المثال، قد يكون استهلاك البرنامج للذاكرة العشوائية (RAM) كبير جدًا ويمكن تجنب هذا الأمر عن طريق تحسين دوال معينة أو بعض الأسطر في البرنامج. أو قد يستهلك البرنامج وقت عالي في تنفيذ جزئية معينة بسبب سوء في تنفيذ إحدى الدوال. حتى تتمكن من معرفة هذه المشاكل، هناك أدوات تسمى بالـ Profiling Tools أو أدوات الـ Code Profiling ، والتي تساعدك عن طريق فحص الكود و اكتشاف هذه المشاكل.

أنواع الـ Code Profiling

أدوات الـ Code Profiling لها استخدامات متعددة ولاغراض مختلفة، من ضمن هذه الأدوات:

  • CPU Profilers: توضح لك الوقت المستخدم لكل دالة بالبرنامج. ويقوم بعرضها بشكل منسق بحيث يظهر لك اكثر الدوال استهلاكا للوقت.
  • Memory Profilers: تتيح لك امكانية معرفة استهلاك البرنامج للذاكرة العشوائية بالإضافة في حال وجود memory leaks.

أدوات الـ Code Profiling

أدوات الـ Code Profiling متوفرة بكثرة على الانترنت، بعضها مجاني وبعضها مدفوع. اغلب الـ IDEs اصبحت تأتي مع النوعين التي قمت بذكرها سابقاً. من الأمثلة على هذه الأدوات، اداة ممتازة من شركة Intel وهي VTune، حيث تدعم هذه الأداة عدة لغات برمجة، وهي:

  • C
  • C++
  • C#
  • Fortran
  • Java
  • Python
  • Google Go
  • Assembly

اداة اخرى ممتازة اسمها YourKit للـ Java و اللغات التي تعتمد على اطار الـ .NET

مثال لاستخدام الـ Memory Profiling في برنامج VTune

مثال لكود مكتوب بالـ C++ يعاني من سوء ادارة الذاكرة (Memory Leak)
مثال لكود مكتوب بالـ C++ يعاني من سوء ادارة الذاكرة (Memory Leak)

في الدالة الموضحة بالمثال السابق ()testMemoryLeak ، قمت بحجز مساحة 5 ميجابايت من الذاكرة عن طريق نداء الدالة ()malloc لم اقم بتحرير هذه المساحة بعد الانتهاء منها.

ملاحظة: بعد حجز مساحة من الذاكرة عن طريق الدالة ()malloc،من الضروري ان تقوم بتحرير هذه المساحة عن طريق نداء الدالة ()free، وإلا ستظل هذه المساحة محجوزة بالذاكرة حتى ينتهي البرنامج، وهذا يسمى بالـ Memory leak 

بعد تشغيل برنامج الـ VTune للكود المكتوب سابقا، سيقوم البرنامج بتنبيهي أن هذه الدالة قامت حجزت 5 ميجابايت من غير تحرير المساحة. إذا قمت بالضغط على الدالة الموضحة بالتقرير،سيقوم برنامج Vtune بتحديد السطر الذي قمت فيه بحجز هذه المساحة دون تحريرها. 

تقرير برنامج Vtune عن وجود Memory Leak في المثال المكتوب سابقاً
تقرير برنامج Vtune أحد برامج الـ Code Profiling عن وجود Memory Leak في المثال المكتوب سابقاً
السطر الذي قمت فيه بحجز مساحة من الذاكرة من غير تحريرها
السطر الذي قمت فيه بحجز مساحة من الذاكرة من غير تحريرها

بعد تعديل الكود وتحرير الذاكرة المحجوزة وتشغيل برنامج الـ VTune مرة أخرى، سيظهر لي في التقرير بأني قمت بحجز 5 ميجابايت وتحريرها عن طريق نداء الدالة ()free بشكل صحيح. بمعنى آخر، البرنامج لا يعاني من أي memory leak حاليا 👏

لاحظ مصطلح “حالياً” لان الوضع في لغات البرمجة (مثل الـ C/C++) معقد ومتعب جداً إذا قمت بالتعامل مع الذاكرة بنفسك 🤷‍♂️

تعديل الكود وتحرير الذاكرة بعد حجزها عن طريق نداء الدالة ()free
تعديل الكود وتحرير الذاكرة بعد حجزها عن طريق نداء الدالة ()free
تقرير برنامج VTune يوضح عدم وجود أي Memory Leak بالبرنامج
تقرير برنامج VTune يوضح عدم وجود أي Memory Leak بالبرنامج