.exr -1 ExceptionAddress: 00000000 Exceptio-6ren">
gpt4 book ai didi

windows - WinDbg 中的 "Break instruction exception"是什么?

转载 作者:可可西里 更新时间:2023-11-01 12:27:37 25 4
gpt4 key购买 nike

我正在调试一些随机的崩溃错误,但实际上很难深入研究。因为当我打开故障转储时,只发现一个错误:

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

其实我没有在代码中设置任何硬代码断点,所以我在谷歌搜索这个异常,有人说这个异常可能是由堆损坏引起的。所以我的问题是,除了硬代码断点、调试时手动断点、堆损坏之外,是否还有其他原因导致此异常?

另一个问题是,我尝试使用 Application Verifier 检查堆损坏,我了解它是如何工作的,app verifier 会在堆损坏时触发 break 指令异常。但是目前,我在没有应用程序验证程序的情况下运行,谁会引发中断指令异常?

附加信息:当前线程的调用堆栈。

*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*

我们的应用程序是一个 Visual Studio 包。

下面是 !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异常导致break指令异常?

!analyze 似乎只是转储托管级别,com 异常可能是托管级别中的最后一个错误。

我也在google上搜索了一些关于中断和异常的东西,一般情况下,break指令异常会在以下情况下触发:1. 硬编码中断请求,如:__asm int 3 (ASM)、System.Diagnostics.Debugger.Break (C#)、DebugBreak() (WinAPI)。2. OS 启用内存运行时检查,如 Application Verifier 可以在堆损坏、内存溢出后触发。3.编译器可以有一些配置来启用未初始化内存块和函数结束(空白区域,retun..之后)应该填充的内容。例如,如果启用/GZ,Microsoft VC 编译器可以填充 0xCC。 0xCC 实际上是 __asm int 3 的操作码。所以如果某些错误导致应用程序运行到这样的 block ,将触发一个断点。

正确吗?

如果那样,我认为 Application Verifier 应该是找到根本原因的最佳选择。

最佳答案

供将来引用,您的调试器未使用正确的符号 警告是由于您需要将 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)

祝修复错误好运!

关于windows - WinDbg 中的 "Break instruction exception"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com