الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول التوأمين Debugger و الـ Comlpiler

بدأه khaled_prg في 28 أكتوبر 2010 · 8 رد · 664 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

حسب معلوماتي الإستخباراتية :wink: فإن الكومبايلر يقوم بتحويل الكود المكتوب بلغة منخفضة المستوى إلى الكود المرافق له بلغة الآلة, هذا إن لم تكن هنالك أخطاء في الكود المكتبوب مما يعني انه يتحقق من كتابة الـ syntax قبل أن يقوم بالترجمة. و لكن ما هو دور Debugger حينئذ !؟

هل الـ Debugger مُدمج مع الكومبايلر أم هو تابع لنظام التشغيل !؟

هل الـ Debugger هو الذي يتحقق من صحة الـ syntax أم أن هذا من دور الكومبايلر !؟

بانتظاركم يا أبطال الفريق :)

تم تعديل هذه المشاركة بواسطة khaled_prg في 28 أكتوبر 2010 في 20:47

1
#2

فائدة الdebugger كثيرة ويمكنك اخذ gdb كمثال فهو يقدم اشياء كثيرة ابرزها .

تتبع الكود و ووضع breakpoint ومشاهدة ال stackframe و المتغيرات بل يمكنك تغيير قيم فى الذاكر اثناء الdebugging و الخ من العمليات .

ما هو debugging بالتحديد؟

كلنا نعرف ان الملف التنفيذى هو ملف عبارة عن اوامر machine code وهو غير صالح للقراء او التتبع . اذا كيف يمكن عمل debugging ؟

ببساطة تخبر الcompiler ان يقدم معلومات debugging مع الملف الناتج وهذا الملف يحوى علاقات بين اكواد البرنامج باللغة العالية المستوى (كالسى مثلا) و لغة الالة (التى تبسط لاسمبلى) ليستطيع الdebugger اثناء عملة معرفة الsource code المتعلق بهذا الmachine code الذى يشغلة .

مثال لتلك المعلومات هى امتداد التنقيح المعروف DWARF

للمزيد

http://en.wikipedia.org/wiki/Debugging_data_format

اقتباس
هل الـ Debugger مُدمج مع الكومبايلر أم هو تابع لنظام التشغيل !؟

كما اخبرتك. هو برنامج يقراء امتداد معلوماتى معين مرتبط بملف تنفيذى . قد ياتى محزم مع المترجم او بيئة التطوير او اى يكن.

تفاصيل عملة نفسها لا تهمنا ولكنها بالتاكيد low level ومرتبطة بنظام التشغيل بشكل وثيق .

هل الـ Debugger هو الذي يتحقق من صحة الـ syntax أم أن هذا من دور الكومبايلر !؟

الكومبيلر بمثابة فاحص او مراقب للبرنامج ولكن لا يتحقق من شى . فقط يريك ماذا يحدث بالتفصيل لتجرى تعديلك على السورس لتصلح الخطاء .

تم تعديل هذه المشاركة بواسطة apex في 28 أكتوبر 2010 في 21:09

1

name : mohamedyosry

#5
اقتباس
تتبع الكود و ووضع breakpoint ومشاهدة ال stackframe

ماذا تقصد بالكلمتين ذات الخط العريض !؟

اقتباس
بل يمكنك تغيير قيم فى الذاكر اثناء الdebugging و الخ من العمليات .

هل تقصد تغيير قيم المتغيرات في الذاكرة !؟

اقتباس
قد ياتى محزم مع المترجم او بيئة التطوير او اى يكن.

إجابتك غير دقيقة !, لماذا أيا يكن !؟

هل يأتي Debugger مع المترجم أو بيئة التطوير أو نظام التشغيل !؟

اقتباس
الكومبيلر بمثابة فاحص او مراقب للبرنامج ولكن لا يتحقق من شى

كيف يكون فاحصا و مع ذلك لا يتحقق من شيء !؟

===============

هل تتم عملية Debugger قبل أو بعد تنفيذ الكود !؟ و مالهدف منها !؟

اقتباس
How Debuggers Work

للمرة العاشرة :blush: ,أنا لا أعرف الإنجليزية !

#6
اقتباس
breakpoint

اخبر البرنامج ان يقف عند سطر معين من البرنامج لاتفحص قيم المتغيرات. وهناك انواع منة . هناك الbreakpoint المشروط.اى يقف فقط اذا حدث شرط معين انت حددتة (مثلا عندما يخرج قيمة متغير من range معين)

اقتباس
stackframe

فى بداية برنامج .ينشى frame واحد فى الstack وهو الخاص بدالة الmain . وهى تسمى فى تلك الحالة الframe الحالية او الoutermost frame . بعد ذلك كلما استدعيت دالة يقوم البرنامج بانشاء frame جديد .

كل frame يحوى بيانات خاصة بدالة واحدة . ويحتوى على الarguments المرسلة للدالة + المتغيرات الخاصة بالدالة local و عنوان الذاكرة الذى توجد بة الدالة المستدعاة (لذلك اذا تلاعب بتلك القيمة يمكن ارسال البرنامج لينفذ كود اخر غالبا ضار) .

وعندما تنتهى الدالة تقوم بمسح الframe الخاصة بها ويصبح الframe الخاص بالدالة التى استدعتها اصلا هى outermost frame .

فائدة فحص الstack frame هى مشاهدة قيم المتغيرات التى فى stack frame لارى مثلا هل ال arguments ارسلت بشكل صحيح ويمكنك مشاهدى اى frame وليس فقط الoutermost .

اقتباس
هل تقصد تغيير قيم المتغيرات في الذاكرة !؟

نعم . قد يكون x قيمتة الحالية تساوى 18 واجعلة يساوى 5 ويستمر البرنامج بناء على ذلك .

اقتباس
إجابتك غير دقيقة !, لماذا أيا يكن !؟

هل يأتي Debugger مع المترجم أو بيئة التطوير أو نظام التشغيل !؟

ياتى غالبا مع المترجم او بيئة التطوير . لكنى لا اتكلم من منطلق تسويقى لاقول لك ستحصل على منقح اضافى مع كذا . انا اتكلم ان طريقة عملة منفصلة عن المترجم . كل ما يريدة من المترجم هو تقديم الdebugging data format التى تساعدة فى عملة .

اقتباس
كيف يكون فاحصا و مع ذلك لا يتحقق من شيء !؟

===============

هل تتم عملية Debugger قبل أو بعد تنفيذ الكود !؟ و مالهدف منها !؟

هو يتفقد ويعرض القيم و المتغيرات اثناء عمل البرنامج . هو فقط يعرضها لك لتعرف ماذا يحدث عند تشغيل برنامجك . ولكنة فى حد ذاتة ليس مسئول عن تصليح اخطائك .

اقتباس
أنا لا أعرف الإنجليزية !

نصيحة من اخ . حاول .حاول حتى اكتساب الاساسيات و ستجد باقى معرفتك تكتسبها بالممارسة .

تم تعديل هذه المشاركة بواسطة apex في 29 أكتوبر 2010 في 11:56

1

name : mohamedyosry

#7
اقتباس
هو يتفقد ويعرض القيم و المتغيرات اثناء عمل البرنامج . هو فقط يعرضها لك لتعرف ماذا يحدث عند تشغيل برنامجك . ولكنة فى حد ذاتة ليس مسئول عن تصليح اخطائك .

هل أفهم من كلامك أن Debugger يعمل على تقديم بعض الخيارات العديدة كالتي ذكرتَها بالأعلى و التي تكمن فائدتها في تتبع الأخطاء وقت تشغيل البرنامج أما الكومبايلر فهو الذي يتتبع الأخطاء قبل الترجمة ليعطيك تنبيهات بأرقام الأسطر الخاطئة (طبعا هو ليس مسئول عن تصحيح الأخطاء !)

اقتباس
نصيحة من اخ . حاول .حاول حتى اكتساب الاساسيات و ستجد باقى معرفتك تكتسبها بالممارسة .

Malheureusement, nous étudions uniquement en français et apprendre l'anglais à nouveau prendre beaucoup de temps donc je vais essayer de l'étudié dans les vacances, je vous remercie pour les conseils

#8
اقتباس
هل أفهم من كلامك أن Debugger يعمل على تقديم بعض الخيارات العديدة كالتي ذكرتَها بالأعلى و التي تكمن فائدتها في تتبع الأخطاء وقت تشغيل البرنامج أما الكومبايلر فهو الذي يتتبع الأخطاء قبل الترجمة ليعطيك تنبيهات بأرقام الأسطر الخاطئة (طبعا هو ليس مسئول عن تصحيح الأخطاء !)

نعم .

اقتباس
Unfortunately, we study only in French and learn English again take a long time so I'll try to study in the holidays, thank you for the advice

بالتوفيق

name : mohamedyosry

مواضيع مشابهة