سؤال

لدي تطبيق نماذج Windows (.NET 4) يعمل بشكل جيد على جهاز التطوير الخاص بي ولكن تعطل في جهازين اختبارين آخرين.يمكنني تحميل miniDump الذي ينشئه في VS2010.

اختيار "تصحيح التصحيح مع مختلط" يؤدي إلى ما لا نهاية له على ما يبدو (أقصى devenv بعد حوالي 20 دقيقة) إساءة استخدام وحدة المعالجة المركزية بواسطة Visual Studio.

عندما قمت بتصحيح التصحيح مع أصلي فقط "، لا يمكن العثور على المصدر (على الرغم من أنني كنت أعطيت المصدر في نفس المجلد كما في آلة الاختبار).يقول ببساطة:

استثناء غير معالج في 0x793f5b8c في yourwinapp .exe.hdmp: 0xc0000409: 0xc0000409.

ثم يظهر لي

call stack الموقع: clr.dll! 793F5B8C ()

كيف يمكنني معرفة ما الذي يسبب التطبيق للتعطل؟هل يمكنني أخذ DraskDump الكامل في حين يتم عرض مربع حوار "إخطار Microsoft"، وسيساعد ذلك؟

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

المحلول

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

معالجة هذا في المصدر. اكتب معالج حدث ل AppDomain.currentDomain.unhandledException وتسجيله في طريقة الرئيسية (). اتركها عرض قيمة E.ExceptionObject.tostring () في مربع رسالة. التي تجعلك أثر المكدس المدار للاستثناء. في حين يتم عرض مربع الرسالة هذه، يمكنك أيضا التقاط miniDump، يجب أن تحصل عليك أقرب إلى موقع التعطل.

الاستثناء الخاص الذي تحصل عليه فيما يتعلق بالتأكيد إلى رمز C / C ++ الأصلي. الفائض المخزن المؤقت الذي يفسد المكدس. تأكد من أن لديك ملفات .pdb لأي رمز أصلي يستخدم تطبيقك. وإعداد خادم رمز Microsoft الخاص بحيث تحصل على أثر مكدس أصلي جيد من MinIDump.

تحرير: حقيقة أنك لا تحصل على UnhandledException مرفعة بالتأكيد نقاط لفحص النزاهة في CRT. تم تصميمه ل ليس ارفع استثناء ولكنه ينهي البرنامج على الفور. السلوك اللازم لأن المكدس للخطر، لا يمكن أن يفترض الكود أنه يمكن أن يكون غير مناسب بأمان. بالنظر إلى موقع التعطل، فمن المحتمل أن يتم هذا الاختيار بالفعل في كود CLR. أعلم أن هذا لم يتم ذلك في إصدارات CLR السابقة ولكن قد يكون ذلك مختلفا في إصدار CLR المضمن مع .NET 4.0

هذا سوف يجعل من الصعب للغاية الحصول على تتبع مكدس مدار. هناك الكثير يمكنك عكس مهندس من تتبع المكدس غير المدارة، طالما قمت بإعداد خادم الرمز بحيث ستحصل على أسماء المعرف من إطارات CLR المكدس. أضف هذا التتبع المكدس في سؤالك إذا كنت تريد المساعدة في تفسيرها. خطأ في رمز CLR ليس من غير المرجح أن يرغب في راجع للشغل، فقد ترغب في النظر في استدعاء دعم Microsoft. ومع ذلك سوف يحتاجون إلى تكرار متسق. قد يقومون بالقيام بذلك بتتبع جميع المكدس المهم إذا كان من الصعب المجيء Repro. قم بإعداد خادم الرمز للحصول على تتبع مكدس جيد غير المدعوم. سهلة في VS2010: أدوات + خيارات، تصحيح الأخطاء، الرموز، علامة "خوادم رمز Microsoft".

نصائح أخرى

قمت بتكوين procdump للحصول على تفريغ الذاكرة الكامل إذا كان التطبيقلديه استثناء غير معالج، يمكنك تصحيحه في VS أو Windbg

و miniDump لديه معلومات المكدس استدعاء كدسار watson، هنا واحد من CLR فريق و كتبت عن نفس

شرح موجز على معلومات Watson Bucket التي تراها في عارض الأحداث استثناء غير معالج

  1. exefilename
  2. إصدار التجميع exe
  3. exe tembly timestamp
  4. الاسم الكامل
  5. نسخة التجميع المعطوبة
  6. drimestamp التجميع المعطوبة
  7. طريقة التجميع المعطوبة DEF
  8. طريقة تعطيل التعليمات التي تسبب الاستثناء
  9. نوع الاستثناء
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top