كيف يمكنني العثور على موقع "فهرس القائمة خارج الحدود" في دلفي

StackOverflow https://stackoverflow.com/questions/1191604

سؤال

في دلفي 2009، ينتج برنامجي الآن "فهرس قائمة خارج الحدود". يولد مربع منبثقة:

alt text
(مصدر: behlesgenealoge.com.)

أنا أستخدم تكوين بناء "Debug" الذي يحتوي على كل وقت تشغيل خطأ وقت التشغيل قيد التشغيل. ولكن هذا لا يلتقط الخطأ قبل حدوثه.

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

هل كانت مفيدة؟

المحلول

هل تم تشغيل "التوقف عن استثناءات دلفي"؟ (أدوات خيارات مصحح الأخطاء استثناءات اللغة [Delphi7]) وإلا فلن تنكسر في Sourcecode الخاص بك.

تأكد أيضا من أن Elisterror ليس في قائمة "أنواع الاستثناءات" الخاصة بك ". تم العثور أيضا على هذه القائمة في أدوات خيارات مصحح الأخطاء استثناءات اللغة (دلفي 7).

نصائح أخرى

misstexcept. (مجاني) أو eurekalog. (مدفوعة) قد تساعد. يمكنك تعيينها لإظهار / البريد الإلكتروني تتبع المكدس عند حدوث خطأ. يمكنني استخدام Eurekalog في جميع مشاريعي وهو لا يقدر بثمن لإصلاح هذه الأنواع من الأشياء.

مهلا، لا تحتاج إلى أي أدوات إضافية لتتبع هذا! :)

فقط قم بتشغيل التطبيق الخاص بك في ظل مصحح الأخطاء وتأكد من تشغيل "التوقف عن استثناءات دلفي" (أو ما يسمى في إصدار دلفي) على.

عند حدوث استثناء - سيكون هناك إشعار من مصحح الأخطاء. اضغط على زر "موافق" / "تصحيح" وعرض مكدس المكالمات. يتم عرض نافذة المكدس الاتصال تلقائيا في إصدار Delphi الأخير. إذا لم تتمكن من رؤية ذلك - انتقل إلى "عرض" / "تصحيح Windows" / "مكدس الاتصال".

هذا كل شئ. ستظهر لك مكدس المكالمة في الموقع الدقيق للمشكلة. وبعد لا توجد أداة إضافية مطلوبة.

هناك حاجة إلى هذه الأدوات (Eurekalog، JCL أو Mutexcept) إذا قمت بتوزيع برنامجك بين المستخدمين وتريد جمع تقارير الأخطاء حول المشاكل الموجودة على جانب العميل. أي لا يوجد مصحح للتحقق من المشكلة.

نظرا لأن هذا خطأ RTL / VCL، فغالبا ما ينتهي بك الأمر بأفضل سلوك كسر / CallStack إذا قمت بتمكين Debug DCU (وإعادة بناء).

أي تلميحات ما يفعله طلبك عند حدوث ذلك؟ حلقة طويلة؟ زر انقر؟

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

بمجرد تضييق المكالمة، مثل أداة تسجيل مثل الرموز يمكن أن تكون مفيدة حقا. على سبيل المثال، غالبا ما سجل متغيرات التحكم في حلقة لمعرفة أي تكرار يحدث آخر قبل الخطأ، فمن المسألة تحديد المشتبه بهم المحتملين.

بالنسبة إلى ListBox، ListStings، ... يعني أن الفهرس هو خارج القائمة-> العد،. وبعد مثال على Tstring-> Strnigs [؟]؛ [؟] هو <0 أو> (tstring-> count-1) سوف ينتج عن خطأ في الحدود.

بالنسبة إلى NMPOP3، إلخ، ... إذا استخدم Pop3Client لجلب البريد الإلكتروني، فهذا لديه أخطاء لبعض UNIX /؟ خادم POP3، الذي جاءت عبر استخدامه لإحضار البريد الإلكتروني من البريد .؟؟.com ولكن موافق مع بعض.

في النهاية، يجب علي إعادة كتابة تطبيق POP3Client الخاص بي باستخدام TClientsocket بدلا من TNMPOP3. يعمل الآن مع كل من POP3Server الذي وصلت إليه.

نأمل أن يكون هذا المساعدة وحظا سعيدا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top