سؤال

أحصل على حوادث عشوائية من تطبيق C# الخاص بي (Windows 7/VS2008) ، ولا يعطيني تتبعًا معتادًا معتادًا ، ولكنه يقترح إغلاق/تصحيح/البحث عن معلومات حوار Windows 7. أنا أقوم بتشغيل التطبيق إما من تحت VS2008 أو بذاته - نفس الشيء. يقترح النقر فوق "Debug" تصحيحه بمثيل جديد من VS ، والذي يفشل باعتباره "أخطاء أخرى مرتبطة بالفعل بالتطبيق". لكن مصحح الأخطاء المرفق لا يعطيني أي فرصة لمعرفة أين يفشل ، فقط يعطي بعض القرائن في نافذة الإخراج (أدناه). كيفية التعامل مع هذا؟

يبدو أنني يجب أن أتمكن من تمكين (؟) استثناءات الفرصة الأولى في VS Debugger ، لكن من غير الواضح كيف .. أقدر أي مساعدة في هذا!

بالإضافة إلى ذلك-وجدت كيفية تمكين تصحيح الاستثناءات في VS2008 (Debug-> استثناءات-> فحص جميع فئات الاستثناءات الخمسة). ولا يزال يعطيني نفس النتيجة تمامًا - تحطمها دون القدرة على رؤية ما يجري في تصحيح الأخطاء.

"ps.exe" (مُدارة): محمّل "C: Windows Assembly GAC_MSIL SYSTEM.DEPLOYMENT 2.0.0.0__B03F5F7F11D50A3A حدث في system.deployment.dll استثناء من الفرصة الأولى من النوع 'System.Threading.ThreadabortException "حدث في mscorlib.dll. لقد خرج مؤشر الترابط 0x1B24 بالرمز 0 (0x0). حدث استثناء من الفرصة الأولى من النوع 'System.ArgumentOutOfRangeException "في mscorlib.dll استثناء من الفرصة الأولى من النوع. فرصة استثناء من النوع 'System.ArgumentOutOfRangeException "حدث في mscorlib.dll استثناء الفرصة الأولى من النوع. من النوع "System.ArgumentOutoFrangeException" حدث في mscorlib.dll استثناء أول فرصة من النوع. حدث "System.ArgumentOutoFrangeException" في mscorlib.dll استثناء أول فرصة من النوع. .ThreadAbortException 'حدث في mscorlib.dll تم خروج مؤشر الترابط 0x19b8 مع الكود 0 (0x0). تم خروج مؤشر الترابط 0x18F4 بالرمز 0 (0x0). لقد خرج مؤشر الترابط 0x420 مع الكود 0 (0x0). حدث استثناء من الفرصة الأولى من النوع 'System.ArgumentOutOfRangeException "في mscorlib.dll استثناء من الفرصة الأولى من النوع. فرصة استثناء من النوع 'System.ArgumentOutOfRangeException "حدث في mscorlib.dll استثناء الفرصة الأولى من النوع. من النوع "System.ArgumentOutoFrangeException" حدث في mscorlib.dll استثناء أول فرصة من النوع. حدث "System.ArgumentOutoFrangeException" في mscorlib.dll استثناء الفرصة الأولى من النوع "system.argumento UtofrangeException "حدث في mscorlib.dll استثناء الفرصة الأولى من النوع. حدث في MSCORLIB.DLL البرنامج [6084] PS.Exe: Managed" قد خرج بالرمز -1073740940 (0xC0000374).

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

المحلول

إنه يشبه إلى حد ما مشاهدة واحدة من تلك الكسوة الضخمة في سباق الفورمولا 1. ذكرت آخر جزء من الشظايا التي وصلت إلى راحة:

// MessageText:
//
// A heap has been corrupted.
//
#define STATUS_HEAP_CORRUPTION           ((NTSTATUS)0xC0000374L)

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

نصائح أخرى

في VS ، انتقل إلى تصحيح / استثناءات ، وقم بتنشيط خانة الاختيار ضمن "إلقاء" من أجل "استثناءات وقت تشغيل اللغة المشتركة". هذا سوف يمسك "استثناء القصة الأولى".

يبدو أن استثناء النشر مرتبط بالنقر مرة واحدة. هل تستخدمه؟

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

يضعط Ctrl + Alt + E في Visual Studio أو اختر Debug> استثناءات من القائمة ، ثم انقر فوق استثناءات CLR لالتقاط جميع استثناءات الفرصة الأولى. يجب أن ينكسر ذلك عند نقطة الخلاف.

خلاف ذلك ، حاول الكتابة Debug.Write و Trace.Write البيانات في النقاط الحرجة في الكود الخاص بك لمعرفة النقطة التي تصل إليها قبل حدوث الفشل. يمكن العثور على كلا التصحيح والكتابة في System.Diagnostics مساحة الاسم.

IMO الأفضل لتصحيح فساد كومة هو استخدام Windbg. هنا مدونة بريد من TESS على تصحيح الفساد المدير كومة.

HTH

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