مشاركة عبر


تشخيص الأخطاء مع المساعدين التصحيح مدارة

تصحيح المساعدات التصحيح المدارة (MDAs) المساعدات التي تعمل بالتزامن مع وقت تشغيل اللغة العامة (CLR) إلى توفر معلومات حول الولاية وقت التشغيل. المساعدين توليد رسائل إخبارية حول أحداث وقت التشغيل التي لا تعوض بخلاف ذلك. يمكنك استخدام MDAs إلى عزل hard-إلى-find تطبيق الأخطاء التي تحدث عند نقل بين إدارتها وتعليمه برمجية مدارة. يمكنك تمكين أو يعطل الجميع MDAs بإضافة المفتاح إلى تسجيل Windows أو بتعيين متغير بيئة. يمكنك تمكين MDAs معينة باستخدام تطبيق إعدادات تكوين. يمكنك تعيين تكوين إضافي إعدادات لبعض MDAs الفردية في ملف التكوين للتطبيق. لأنه يتم توزيع ملفات تكوين هذه عند وقت التشغيل هو تم تحميله، يجب تمكين MDA قبل بدء تشغيل تطبيق تتم إدارته. لا يمكنك تمكين التطبيقات التي بدأت بالفعل.

ملاحظةملاحظة

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

ملاحظةملاحظة

عندما يقوم بتنفيذ تعليمات برمجية في بيئة التطوير المتكاملة (IDE) لبرنامج ‏‫Visual Studio، يمكنك تجنب ‏‏ استثناء مربع حوار الذي يظهر لإحداث MDA معينة.إلى للقيام بذلك، من قائمة تصحيح ، انقر فوق الاستثناءات.(إذا لم يكن يحتوي تشغيل قائمة تصحيح الأمر استثناءات ، انقر فوق Cusإلىmize تشغيل إلى ols قائمة إلى إضافته.) في من استثناءات صندوق حوار قم بتوسيع القائمة المساعدين التصحيح التي تمت إدارتها وقم بإلغاء تحديد خانة الاختيار تم طرح ل MDA الفردية.على سبيل المثال، لتجنب الاستثناء صندوق حوار ل contextSwitchDeadlock MDAمسح تم طرح الخانة بجانب اسمه في القائمة المساعدين التصحيح التي تمت إدارتها.يمكنك أيضا استخدام صندوق الحوار هذا لتمكين MDAs.

يسرد الجدول التالي MDAs التي تأتي مع.NET Framework.

asynchronousThreadAbort MDA

bindingFailure MDA

callbackOnCollectedDelegate MDA

contextSwitchDeadlock MDA

dangerousThreadingAPI MDA

dateTimeInvalidLocalFormat MDA

dirtyCastAndCallOnInterface MDA

disconnectedContext MDA

dllMainReturnsFalse MDA

exceptionSwallowedOnCallFromCom MDA

failedQI MDA

fatalExecutionEngineError MDA

gcManagedToUnmanaged MDA

gcUnmanagedToManaged MDA

illegalPrepareConstrainedRegion MDA

invalidApartmentStateChange MDA

invalidCERCall MDA

invalidFunctionPointerInDelegate MDA

invalidGCHandleCookie MDA

invalidIUnknown MDA

invalidMemberDeclaration MDA

invalidOverlappedToPinvoke MDA

invalidVariant MDA

jitCompilationStart MDA

loaderLock MDA

loadFromContext MDA

marshalCleanupError MDA

التنظيم والإرسال MDA

memberInfoCacheCreation MDA

moduloObjectHashcode MDA

nonComVisibleBaseClass MDA

notMarshalable MDA

openGenericCERCall MDA

overlappedFreeError MDA

pInvokeLog MDA

pInvokeStackImbalance MDA

raceOnRCWCleanup MDA

reentrancy MDA

releaseHandleFailed MDA

reportAvOnComRelease MDA

streamWriterBufferedDataLost MDA

virtualCERCall MDA

عن طريق الافتراضي، تنشيط إطار عمل.NET مجموعة فرعية MDAs لكافة مصحح أخطاء البرنامج المدارة. يمكنك عرض القيمة الافتراضية المعينة في ‏‫Visual Studio بالنقر فوق استثناءات في قائمة تصحيح و expوing قائمة المساعدين التصحيح التي تمت إدارتها.

تمكين وتعطيل MDAs

يمكنك تمكين وتعطيل MDAs باستخدام المفتاح تسجيل، متغير بيئة، و تطبيق إعدادات تكوين. يجب تمكين أما المفتاح السجل أو متغير البيئة إلى استخدام إعدادات تكوين للتطبيق.

في ‏‫‏‫Visual Studio 2005 وأحدث الإصدارات، عند ممكّن عملية الاستضافة، لا يمكنك يعطل MDAs الموجودة في المجموعة الافتراضية أو ممكّن MDAs غير موجودة في الافتراضية المعينة. The hosting عملية هو ممكّن بواسطة الافتراضي, so it must be بوضوح معطّل.

إلى يعطل عملية الاستضافة في ‏‫Visual Studio، قم بما يلي:

  1. حدد مشروع في مستكشف الحل.

  2. في قائمة مشروع, انقر فوق خصائص.

    يظهر الإطار مصمم مشروع.

  3. انقر فوق علامة تبويب تصحيح.

  4. في تمكين المصححات مقطع، مسح تمكين عملية مضيف ‏‫Visual Studio فحص صندوق.

على الرغم من ذلك، قم بتعطيل عملية الاستضافة يمكن أن يؤثر على الأداء. يمكنك تجنب الحاجة إلى dهوable MDAs عن طريق منع Studio Vهوual dهوplaying صندوق الحوار MDA كلما إعلام MDA هو التي تم تلقيها. إلى القيام بذلك، انقر فوق استثناءات في قائمة تصحيح ، قم بتوسيع قائمة المساعدين التصحيح التي تمت إدارتها ، وثم تحديد أو امسح علامة تحديد خانة اختيار تم طرح ل MDA الفردية.

تمكين و تعطيل MDAs باستخدام أحد مفاتيح سجل

يمكنك تمكين MDAs بواسطة إضافة مفتاح فرعي HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA (نوع REG_SZ، القيمة 1) في تسجيل Windows. قم بنسخ المثال التالي إلى ملف نصي يدعى MDAEnable.reg و مزدوج-انقر فوق اسم الملف في مستكشف Windows لتمكين MDAs تشغيل ذلك الكمبيوتر.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"

لتعطيل MDAs، التعيين مفتاح فرعي MDA إلى 0 (صفر) باستخدام محرر تسجيل Windows. بدلاً من ذلك، يمكنك نسخ المثال التالي إلى ملف نصي يدعى MDADisable.reg و انقر نقراً مزدوجاً فوق اسم الملف في مستكشف Windows.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="0"

افتراضياً، يتم ممكّن بعض MDAs عند تشغيل أحد تطبيقات هو إرفاق مصحح أخطاء، حتى بدون إضافة المفتاح regهوtry. من هذه المساعدات أمثلة pInvokeStackImbalance MDAو invalidApartmentStateChange MDA. يمكنك يعطل هذه sistants كـ بواسطة تشغيل الملف MDADisable.reg كـ الموصوفة سابقا في هذا المقطع.

تمكين و تعطيل MDAs باستخدام متغير بيئة

يمكنك أيضا التحكم MDA تنشيط بواسطة متغير بيئة COMPLUS_MDA، والذي يتجاوز المفتاح السجل. The COMPLUS_MDA string هو a case-insensitive, semicolon-delimited list of MDA names or غير ذلك خاص عنصر تحكم strings. بدء التشغيل ضمن مصحح أخطاء مدارة أو غير مدارة يتيح التعيين من MDAs ب الافتراضي. Th هو هو تنفيذ ضمنياً بأن lهوt بفواصل منقوطة من MDAs افتراضياً ضمن مصحح أخطاء البرنامج إلى القيمة المفتاح متغير أو regهوtry البيئة. The خاص عنصر تحكم strings are the following:

  • 0-يلغي تنشيط الجميع MDAs.

  • 1-قم بقراءة إعدادات MDA مناسم التطبيق. mda.config.

  • managedDebugger-بوضوح ينشط MDAs الجميع ضمنياً يتم تنشيط عند الملف القابل للتنفيذ المدارة هو بدأ ضمن مصحح أخطاء.

  • unmanagedDebugger-بوضوح ينشط MDAs الجميع ضمنياً يتم تنشيط عند ملحق قابل للتنفيذ غير المدارة هو بدأ ضمن مصحح أخطاء.

إذا كان هناك إعدادات متعارضة، الأحدث إعدادات يمنع الإعدادات السابقة:

  • COMPLUS_MDA=0قم بتعطيل الجميع MDAs، بما في ذلك ممكّن ضمنياً ضمن مصحح أخطاء.

  • COMPLUS_MDA=gcUnmanagedToManagedتمكنgcUnmanagedToManagedبالإضافة إلى أي MDAs التي تم ممكّن ضمنياً ضمن مصحح أخطاء.

  • COMPLUS_MDA=0;gcUnmanagedToManagedتمكنgcUnmanagedToManagedولكن MDAs وإلا يكون ضمنياً إلى تعطيل ممكّن ضمن مصحح أخطاء.

تمكين وتعطيل MDAs باستخدام تطبيق-إعدادات تكوين المحددة

يمكنك تمكين أو تعطيل، و تكوين بعض المساعدين بشكل فردي في MDA ملف تكوين للتطبيق. إلى تمكين استخدام ملف تكوين تطبيق لتكوين MDAs، يجب أن يتم تعيين متغير بيئة COMPLUS_MDA أو المفتاح السجل MDA. ملف تكوين تطبيق هو عادة موجودة في نفس الدليل كملف تنفيذي (.exe) للتطبيق. يأخذ اسم ملف نموذج من اسم التطبيق. mda.config؛ من أجل مثال، notepad.exe.mda.config. قد يكون المساعدات الممكنة في ملف تكوين تطبيق الالسمات أو العناصر التي تم تصميمها خصيصا إلى التحكم في سلوك هذا المساعد. يوضح المثال التالي كيفية إلى تمكين وتكوين التنظيم والإرسال MDA.

<mdaConfig>
  <assistants>
    <marshaling>
      <methodFilter>
        <match name="*"/>
      </methodFilter>
      <fieldFilter>
        <match name="*"/>
      </fieldFilter>
    </marshaling>
  </assistants>
</mdaConfig>

MarshalingMDA emits معلومات حول نوع المدارة التي كان يتم تنظيم إلى نوع غير مدارة لكل انتقال إلى-مدار في تطبيق. Marshalingيمكنك أيضا تصفية MDA أسماء الأسلوب وبنية حقول المتوفرة في <methodFilter>و <fieldFilter>العناصر التابعة، على التوالي.

يظهر المثال التالي كيفية تمكين MDAs متعددة باستخدام الإعدادات الافتراضية الخاصة بها.

<mdaConfig>
  <assistants>
    <illegalPrepareConstrainedRegion />
    <invalidCERCall />
    <openGenericCERCall />
    <virtualCERCall />
  </assistants>
</mdaConfig>
ملاحظة هامةهام

عندما تقوم بتعيين مساعد واحد أو المزيد في ملف تكوين، يجب أن سرد الترتيب الأبجدي.على سبيل المثال، إذا كنت ترغب في إلى تمكين كلا من virtualCERCallو invalidCERCallMDAs، يجب إضافة <invalidCERCall />الإدخال قبل <virtualCERCall />إدخال.إذا لم تكن الإدخالات بترتيب أبجدي، ملف تكوين غير صحيح لم تتم معالجته رسالة الاستثناء هو dهوplayed.

إخراج MDA

إخراج MDA هو مشابهاً للمثال التالي، الذي يعرض الإخراج من pInvokeStackImbalanceMDA.

A call to PInvoke function 'MDATest!MDATest.Program::StdCall' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

راجع أيضًا:

موارد أخرى

تصحيح الأخطاء، تتبع، و إنشاء تشكيل جانبي