أنظف طريقة لتعطل التطبيق بشكل صريح؟
-
26-09-2019 - |
سؤال
يمتلك طلبي مخصصًا في معالجة التعطل (انظر كتاب John Robbins الممتاز حول "Debugging Windows Applications"). لاختبار هذه الوظيفة ، استخدمت دائمًا دالة Windows DebugBreak () وهذا يعمل دائمًا بشكل مثالي. ولكن منذ Windows 7 ، يقول استدعاء هذه الوظيفة فقط "تم الوصول إلى نقطة توقف" وتوقف التطبيق دون الاتصال بمواجهات التحطم الخاصة بي.
يمكنني دائمًا وضع هذا الرمز في طلبي لاختبار وظائف التحطم:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
أو حتى إضافة عدة حالات ، فقط في حالة 0xdeadbeef هو عنوان صالح:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;
لكنني كنت أتساءل: أليس هناك طريقة أنظف لتعطل تطبيقك تحت Windows؟
المحلول
ما عليك سوى إنشاء مؤشر فارغ إلى كائن مع بعض وظائف الأعضاء محاولة الاتصال بأحدهم؟ وربما تفعل ذلك في وظيفة حتى تعرف ما هي daoes
void CrashApp()
{
MyObject * ptr = 0;
ptr->Function();
}
بالتأكيد أسهل طريقة واضحة إلى حد ما ما يحدث
نصائح أخرى
يمكنك استخدام __debugbreak () جوهري بدلا من الدالة debugbreak (). هذا لا يقول أي شيء ويتعطل مع استثناء _breakpoint
Raiseexception () هو وسيلة أخرى للتحطم.