私はいくつかのランダムなクラッシュバグをデバッグしていますが、実際には深く掘り下げるのは非常に困難です。クラッシュダンプを開いたときに、エラーが1つだけ見つかるためです。
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*
私たちのアプリケーションはVisualStudioパッケージです。
以下は!analyze-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
.。
管理対象スタックに、明示的なエラーMicrosoft.VisualStudio.NativeMethods.ThrowOnFailure ..があります。しかし、これは、com例外がブレーク命令例外を引き起こすことを意味しますか?
!analyzeは管理対象レベルをダンプしているようですが、com例外は管理対象レベルの最後のエラーである可能性があります。
また、グーグルから割り込みと例外について何かを検索します。通常、ブレーク命令の例外は、次の条件でトリガーできます。1。ハードコード割り込み要求:__ asm int 3(ASM)、System.Diagnostics.Debugger.Break(C#)、 DebugBreak()(WinAPI)。 2. OSは、ヒープの破損やメモリのオーバーランの後にApplication Verifierがトリガーできるように、メモリランタイムチェックを有効にします。 3.コンパイラは、初期化されていないメモリブロックと関数の終わり(再調整後の空白領域)に何を入力する必要があるかを有効にするための構成を持つことができます。たとえば、Microsoft VCコンパイラは、/ GZを有効にすると0xCCを埋めることができます。0xCCは、実際には__asm int 3のオペコードです。したがって、エラーによってアプリケーションがそのようなブロックにぶつかると、ブレークポイントがトリガーされます。 。
正しい?
もしそうなら、根本的な原因を見つけるにはApplicationVerifierが最良の選択だと思います。
今後の参考のために、デバッガーが正しいシンボルを使用していません WindowsシンボルをWindbgシンボルパスに追加する必要があるため、警告が表示されます。これを行う方法は次のとおりです。
Microsoftシンボルサーバーパスを自動的に設定します。
0:000> .symfix
オプションで、シンボルをダウンロードする追加の場所を指定できます。例:
0:000> .sympath+ c:\myproject
現在のシンボル検索パスを確認します。
0:000> .sympath
次のようなものが表示されます。
SRV**http://msdl.Microsoft.com/download/symbols
シンボルのリロード:
0:000> .reload
次に、次のコマンドを使用して、現在の例外に関する情報を確認できます。
0:000> !analyze -v
次のような行が表示されます。
ExceptionCode: c0000005 (Access violation)
バグ修正を頑張ってください!
クラッシュダンプの原因となった例外を見つけるために使用するコマンドは.ecxr
です。 ExceptionAddressがゼロであるため、.exr -1
から取得した出力は正しくありません。