2010-07-22 12 views
13

मैं कुछ यादृच्छिक क्रैश बग डिबग कर रहा हूं, लेकिन वास्तव में गहराई से जाना मुश्किल है। क्योंकि जब मैं क्रैश डम्प खोलते हैं, तो केवल एक ही त्रुटि पाते हैं:WinDbg में "ब्रेक इंस्ट्रक्शन अपवाद" क्या है?

0:000> .exr -1 
ExceptionAddress: 00000000 
    ExceptionCode: 80000003 (Break instruction exception) 
    ExceptionFlags: 00000000 
NumberParameters: 0 

असल में मैं कोड में किसी भी कड़ी मेहनत से कोड ब्रेकपाइंट सेट नहीं किया है, तो मैं गूगल में इस अपवाद के बारे में खोज, कुछ लोगों ने कहा कि यह अपवाद कारण हो सकता है ढेर भ्रष्टाचार से। तो मेरा सवाल है, क्या कोई अन्य कारण है कि हार्ड अप कोड ब्रेकपॉइंट को छोड़कर, इस समस्या को क्यों अपनाना, मैन्युअल ब्रेकपॉइंट, डीबगिंग, भ्रष्टाचार ढेर?

एक और सवाल यह है कि, मैं ढेर भ्रष्टाचार की जांच के लिए एप्लिकेशन सत्यापनकर्ता का उपयोग करने का प्रयास करता हूं, मैं समझता हूं कि यह कैसे काम करता है, ऐप सत्यापनकर्ता भ्रष्टाचार ढेर के दौरान ब्रेक निर्देश अपवाद को ट्रिगर करेगा। लेकिन वर्तमान में, मैं ऐप सत्यापनकर्ता के बिना चलाता हूं, जो ब्रेक निर्देश अपवाद उठाएगा?

अतिरिक्त जानकारी: वर्तमान धागे के लिए कॉल स्टैक।

*0:000> k 
ChildEBP RetAddr 
0012f96c 7c827d19 ntdll!KiFastSystemCallRet 
0012f970 77e6202c ntdll!NtWaitForMultipleObjects+0xc 
0012fa18 7739bbd1 kernel32!WaitForMultipleObjectsEx+0x11a 
0012fa74 3b288523 user32!RealMsgWaitForMultipleObjectsEx+0x141 
0012fab8 3b32b9bd msenv!EnvironmentMsgLoop+0x1ea 
0012fae4 3b32b94d msenv!CMsoCMHandler::FPushMessageLoop+0x86 
0012fb0c 3b32b8e9 msenv!SCM::FPushMessageLoop+0xb7 
0012fb28 3b32b8b8 msenv!SCM_MsoCompMgr::FPushMessageLoop+0x28 
0012fb48 3b32be4e msenv!CMsoComponent::PushMsgLoop+0x28 
0012fbe0 3b327561 msenv!VStudioMainLogged+0x482 
0012fc0c 3000a4a6 msenv!VStudioMain+0xc1 
0012fc38 30007301 devenv!util_CallVsMain+0xff 
0012ff14 3000760c devenv!CDevEnvAppId::Run+0x91f 
0012ff30 30007680 devenv!WinMain+0x74 
0012ffc0 77e6f23b devenv!License::GetPID+0x258 
0012fff0 00000000 kernel32!BaseProcessStart+0x23* 

हमारा एप्लिकेशन एक विजुअल स्टूडियो पैकेज है।

नीचे वहाँ एक स्पष्ट त्रुटि है, Microsoft.VisualStudio.NativeMethods.ThrowOnFailure .. लेकिन उस से परिणाम है! विश्लेषण -v

0:000> !analyze -v 
******************************************************************************* 
*                    * 
*      Exception Analysis         * 
*                    * 
******************************************************************************* 

*** WARNING: Unable to verify checksum for mscorlib.ni.dll 
************************************************************************* 
***                 *** 
***                 *** 
*** Your debugger is not using the correct symbols     *** 
***                 *** 
*** In order for this command to work properly, your symbol path *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: kernel32!pNlsUserInfo       *** 
***                 *** 
************************************************************************* 
************************************************************************* 
***                 *** 
***                 *** 
*** Your debugger is not using the correct symbols     *** 
***                 *** 
*** In order for this command to work properly, your symbol path *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: kernel32!pNlsUserInfo       *** 
***                 *** 
************************************************************************* 

FAULTING_IP: 
+0 
00000000 ??    ??? 

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 00000000 
    ExceptionCode: 80000003 (Break instruction exception) 
    ExceptionFlags: 00000000 
NumberParameters: 0 

FAULTING_THREAD: 00001f1c 

DEFAULT_BUCKET_ID: STATUS_BREAKPOINT 

PROCESS_NAME: devenv.exe 

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached. 

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid 

NTGLOBALFLAG: 0 

APPLICATION_VERIFIER_FLAGS: 0 

MANAGED_STACK: 
SP  IP  Function 
    0012E584 09C8A903 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure(Int32, Int32[])+0x3b 
    0012E590 09C8C604 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.Design.VSDesignSurfaceManager.Microsoft.VisualStudio.Shell.Interop.IVsSelectionEvents.OnElementValueChanged(UInt32, System.Object, System.Object)+0x144 

StackTraceString: <none> 
HResult: 80004005 

EXCEPTION_OBJECT: !pe 3115d464 
Exception object: 3115d464 
Exception type: System.Runtime.InteropServices.COMException 
Message: Error HRESULT E_FAIL has been returned from a call to a COM component. 
InnerException: <none> 
StackTrace (generated): 
    SP  IP  Function 
    0012E584 09C8A903 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure(Int32, Int32[])+0x3b 
    0012E590 09C8C604 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.Design.VSDesignSurfaceManager.Microsoft.VisualStudio.Shell.Interop.IVsSelectionEvents.OnElementValueChanged(UInt32, System.Object, System.Object)+0x144 

StackTraceString: <none> 
HResult: 80004005 

MANAGED_OBJECT: !dumpobj 3201988 
Name: System.String 
MethodTable: 79330a00 
EEClass: 790ed64c 
Size: 158(0x9e) bytes 
(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) 
String: Error HRESULT E_FAIL has been returned from a call to a COM component. 
Fields: 
     MT Field Offset     Type VT  Attr Value Name 
79332c4c 4000096  4   System.Int32 1 instance  71 m_arrayLength 
79332c4c 4000097  8   System.Int32 1 instance  70 m_stringLength 
793316e0 4000098  c   System.Char 1 instance  45 m_firstChar 
79330a00 4000099  10  System.String 0 shared static Empty 
    >> Domain:Value 00219c28:03031198 << 
79331630 400009a  14  System.Char[] 0 shared static WhitespaceChars 
    >> Domain:Value 00219c28:03031798 << 

EXCEPTION_MESSAGE: Error HRESULT E_FAIL has been returned from a call to a COM component. 

MANAGED_OBJECT_NAME: System.Runtime.InteropServices.COMException 

LAST_CONTROL_TRANSFER: from 7c827d19 to 7c82860c 

PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT 

BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT 

STACK_TEXT: 
09c8a903 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure 
09c8c604 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.Design.VSDesignSurfaceManager.Microsoft.VisualStudio.Shell.Interop.IVsSelectionEvents.OnElementValueChanged 


STACK_COMMAND: dds 12e584 ; kb 

FOLLOWUP_IP: 
+9c8a903 
09c8a903 8bc6   mov  eax,esi 

SYMBOL_STACK_INDEX: 0 

SYMBOL_NAME: Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure+9c8a903 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: Microsoft_VisualStudio_Design 

IMAGE_NAME: Microsoft.VisualStudio.Design.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 0 

FAILURE_BUCKET_ID: STATUS_BREAKPOINT_80000003_Microsoft.VisualStudio.Design.dll!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure 

BUCKET_ID: APPLICATION_FAULT_STATUS_BREAKPOINT_Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure+9c8a903 

Followup: MachineOwner 

...

कामयाब ढेर में, मतलब कॉम अपवाद ब्रेक निर्देश अपवाद का कारण बनता है?

! विश्लेषण लगता है कि प्रबंधित स्तर को डंप करें, कॉम अपवाद शायद प्रबंधित स्तर में अंतिम त्रुटि हो।

मैं Google से इंटरप्ट और अपवाद के बारे में कुछ भी खोजता हूं, आम तौर पर, ब्रेक इंस्ट्रक्शन अपवाद को निम्नलिखित स्थितियों में ट्रिगर किया जा सकता है: 1. हार्डकोड इंटरप्ट अनुरोध, जैसे: __asm ​​int 3 (ASM), System.Diagnostics.Debugger। ब्रेक (सी #), डीबगब्रैक() (विनैपी)। 2. ओएस मेमोरी रनटाइम चेक सक्षम करता है, जैसे एप्लिकेशन सत्यापनकर्ता ढेर भ्रष्टाचार, स्मृति ओवररन के बाद ट्रिगर कर सकता है। 3. कंपाइलर में कुछ कॉन्फ़िगरेशन हो सकता है जो अनियंत्रित मेमोरी ब्लॉक और फ़ंक्शन के अंत (खाली क्षेत्र, retun के बाद ..) के लिए भरा जाना चाहिए। उदाहरण के लिए, माइक्रोसॉफ्ट वीसी कॉम्प्लेयर सक्षम/जीजेड अगर 0xCC भर सकता है। 0xCC वास्तव में __asm ​​int 3 का एक ऑपोड है। इसलिए अगर कुछ त्रुटि इस तरह के ब्लॉक में चलती है, तो ब्रेक पॉइंट ट्रिगर करेगा।

सही?

यदि ऐसा है, तो मुझे लगता है कि मूल कारण खोजने के लिए एप्लिकेशन सत्यापनकर्ता सबसे अच्छा विकल्प होना चाहिए।

उत्तर

12

भविष्य के संदर्भ के लिए, आपका डीबगर सही प्रतीकों का उपयोग नहीं कर रहा है चेतावनी इसलिए होती है क्योंकि आपको विंडबग प्रतीकों के पथ में विंडोज प्रतीक जोड़ने की आवश्यकता है।

सेट माइक्रोसॉफ्ट प्रतीक सर्वर स्वचालित रूप से पथ:

0:000> .symfix 

वैकल्पिक रूप से आप एक अतिरिक्त स्थान जहां है, उदा से प्रतीक डाउनलोड करने के लिए निर्दिष्ट कर सकते हैं यहाँ कैसे ऐसा करने के लिए है:

0:000> .sympath+ c:\myproject 

चेक वर्तमान प्रतीक खोज पथ:

SRV**http://msdl.microsoft.com/download/symbols 

पुनः लोड प्रतीक::

0:000> .sympath 

आप कुछ इस तरह देखना चाहिए

0:000> .reload 

उसके बाद, आप हो जाएगा curr के बारे में जानकारी देखने में सक्षम ईएनटी अपवाद इस आदेश का उपयोग:

ExceptionCode: c0000005 (Access violation) 

गुड लक फिक्सिंग कीड़े:

0:000> !analyze -v 

आपको एक पंक्ति निम्न के समान देखना चाहिए!

+0

इस संक्षिप्त उत्तर के लिए धन्यवाद! मेरा दिन बना दिया। –

+3

प्रतीकों को कैसे ठीक कर सकते हैं INT3 ब्रेकपॉइंट को एक्सेस उल्लंघन में परिवर्तित कर सकते हैं? –

2

क्रैश डंप के कारण अपवाद को खोजने के लिए उपयोग करने के लिए आदेश .ecxr है। .exr -1 से प्राप्त आउटपुट गलत है क्योंकि अपवाद एड्रेस शून्य है।

संबंधित मुद्दे