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

مشكله الخطأفي وقت التنفيذ ؟

مغلق
بدأه selver في 16 نوفمبر 2005 · 6 رد · 599 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عندي سؤال يا شباب لم أجد له حلاً

في بعض الاحيان اكتب برنامج صحيح والكبايلر لا يجد عليه اخطاء لكن يكون الخطأ في run time error يعني في وقت التنفيذ وهذه المشكله تواجهني كثيرا اذا كان البرنامج فيه مؤشرات ولكن انا متأكد من صحة خطواتي . اتمنى ان اجد حلا لهذه المشكله

#2

جميع البرامج معرضة للأخطاء او الـ bugs كما تسمى, و الحل يكون في محاولة تتبع الخطأ و معرفة مكانه و اسبابه من اجل التخلص منه.

يمكن استخدام debugger مثل اللي موجود في الـ Visual Studio و تستطيع من خلاله تتبع الكود خطوة خطوة و متابعة تغير المتغيرات.

في اي مشروع مفتوح, قم بضغط F10 لتبدأ في عملية تتبع الكود خطوة خطوة, و لكي تمشي الى الخطوة التالية اضغط F10 مرة أخرى, و للدخول داخل الـ functions اضغط F11

تستطيع ايضا وضع breakpoint في مكان معين من الكود عن طريق ضغط F9 و من ثم تستطيع ترك البرنامج يمشي لوحده بضغط F5 الى ان يصل البرنامج الى النقطة اللتي وضعت فيها break point, عندها سيتوقف البرنامج و يدعك تمشي به خطوة خطوة مرة أخرى.

النافذة السفلية ستقوم بعرض المتغيرات و قيمها, و كلما تخطو خطوة ستلاحظ المتغيرات و هي تتغير, و تستطيع عن طريق عملية التتبع هذه ان تحصل على معلومات قد يمكنك من خلالها ايجاد مكان الخطأ.

#3

هـناك طرق كثيرة للغاية لإكتشاف الأخطاء .. منها ما هـو موجود في المترجم الذي تعـمل عليه ... ومنها ما تستطيع أنت بنفسك عـمله...

تستطيع مثلاً استخدام الكائن cout بعـد كل أمر حيث يقوم بعرض رقم السطر (مثلاً) وحينما يتوقف البرنامج عـن التنفيذ ستعرف رقم السطر أو الدالة أو الكائن الذي توقف عـنده البرنامج...

مشكلتك كما نرى في المؤشرات ... إذا كنت تقصد أنك عـملت كلاس على الـ heap وليس على الـ stack فلربما أن الكلاس تم إلغاء ذاكرتـه وأنت لا تعلم ... كيف ستعرف هذا الأمر .. بإمكانك من خلال الكائن cout حيث تقوم بعرض مخرجات (أي مخرج) من خلال تعريف دالة الهـدم ....

لا أدري إن كان هـناك أساس علمي موثوق لعـملية إكتشاف الأخطاء أو أسلوب قياسي معـمول به .. ولكن الأمر كله مهارات برمجية لا أقل ولا أكثر ... لو تكتب الكـود هـنا سيكون أفضل ...

#4
اقتباس
مشكلتك كما نرى في المؤشرات ... إذا كنت تقصد أنك عـملت كلاس على الـ heap وليس على الـ stack فلربما أن الكلاس تم إلغاء ذاكرتـه وأنت لا تعلم ...

صحيح ذكرتني,

لتصحيح الأخطاء ايضا يحتاج المرء فهم (و لو سطحي) عن الـ stack و الـ heap و ما اللذي يحدث عند أعلان متغيرات جديدة و استخدام كلمة new و كيف يتم ارسال البارامترات الى الـ functions و كيف يتم اعادة الـ return value و ما اللذي يحصل عندما تدخل داخل الـ function و تخرج منه.

http://www.codeproject.com/debug/cdbntsd2.asp

http://www.codeproject.com/debug/cdbntsd3.asp

#5

الوقاية خير من العلاج :D

الأفضل من البحث عن أين الخطأ هو تصميم البرنامج على الورق بطريقة صحيحة لا تسمح له بحدوث أى خطأ :D ( أنا عن نفسي مش بعمل كده :D )

لذلك أظن أنه من باب توفير عنأ الـDebug هو تصميم البرنامج خطوة خطوة مع توقع كل ما يمكن حدوثة من عوامل داخلية و خارجية

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#6

انا اللى فهمته اللى عندك خطأ منطقى

وكما تعرف الخطأ فىالبرنامج نوعين

sintix error

logic error

لذلك افضل حل كما قال الاخوة ان تراقب المتغيرات وقيمها والمؤشرات فربما تشيرالى مكان خاطئ او تحاول ان تضيف رقم كبير من نوع لا يقبل او اي خطأ منطقى وليس برمجى

الكابـــــــــــwinxp4444ـــــــتـــــــــن

بعض من برامجى

see itdeeb monitor 2005

net monitor 2004

deeb security system

deeb encription system-with speshal algo. make by me

deeb mdb killer

deeb cash pass killer

ديب دلول ▒ deebdalloul

for i= 1 to 10000 deeb x*i programblood.gif

#7

هذه مشكله معروفه في استخدام المؤشرات

وهي انك تقوم باستعلام أو تحديد مكان محجوز في الذاكره أو أنه NULL

وأفضل طريقه لتجاهل هذا الخطأ هو انك تركز على جمل الاستعلام عندك (while & for & if )

وتقريباً بتلقى فيها انه تؤشر الى متغير آخر وقيمة المتغير الحالي NULL

:)

هذا الموضوع مغلق.

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