wenmo8 发布的文章

如果您有一个WER处理过的崩溃进程,但您知道JIT调试器设置错误,或者根本没有设置(因此崩溃对话框上没有“调试”按钮),则可以保持对话框打开,并将您选择的任何调试器附加到挂起的崩溃进程。
不过,有个问题。通过将调试器附加到挂起的进程,进程的最后异常信息已丢失;这是因为调试器成功附加到挂起(或挂起)进程的方式是插入一个新的正在运行的线程并使该线程崩溃。因此,调试器及其使用.dump生成的任何小型转储都将无法找到原始程序的异常信息。哎呀!怎么办?
从kb的堆栈跟踪开始:

RetAddr           : Args to Child                                                           : Call Site
000007f9`d88212d2 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!NtWaitForMultipleObjects+0xa
000007f9`dae8d20e : 00000000`02300000 000007f6`96e75000 00000000`00000000 00000000`000001dc : KERNELBASE!WaitForMultipleObjectsEx+0xe5
000007f9`dae8cfd2 : fffff8a0`00000080 00000000`80004005 00000000`000001ec 00000000`00000000 : KERNEL32!WerpReportFaultInternal+0x1fa
000007f9`d889fc87 : 00000000`00000000 00000000`00195c30 00000000`00000030 00000000`00195c30 : KERNEL32!WerpReportFault+0x42
000007f9`db56a43d : 00000001`00000000 00000000`00196990 00000000`0019f620 00000000`003441d0 : KERNELBASE!UnhandledExceptionFilter+0x1d7
000007f9`db4b4ad4 : 000007f9`d8eeabdd 00000000`00196990 00000000`00000000 00000000`00000000 : ntdll!LdrpLogFatalUserCallbackException+0x4d
000007f9`db4d464d : 00000000`00000000 00000000`00195de8 00000000`00195da0 000007f9`d8f7f000 : ntdll!KiUserCallbackDispatcherHandler+0x20
000007f9`db4d567c : 000007f9`d8ee0000 00000000`0019f5c0 000007f9`0000e4f0 00000000`00000000 : ntdll!RtlpExecuteHandlerForException+0xd
000007f9`db4b4bba : 00000000`00000000 00000000`00000000 000007f6`96e7e300 00000000`00000000 : ntdll!RtlDispatchException+0x392
000007f9`db4b2acd : 000007f9`d8bbc36c 00000000`00360f00 00000000`00360f00 00000000`00360f00 : ntdll!KiUserExceptionDispatch+0x2e
000007f9`d8bbc36c : 00000000`00360f00 00000000`00360f00 00000000`00360f00 00000000`00000000 : ntdll!memcpy+0x21a

EXCEPTION_POINTERS结构地址似乎作为调用KERNEL32!WerpReportFault的参数2和4传递。由此,可以显示异常和上下文记录-但我们只需要在小型转储中包含异常指针地址,因为添加这一地址将允许 !analyze命令以工作。
使用命令“.dump/ma/xp 00195c30 dump.dmp”创建小型转储,就完成了。

 

简介

STATUS_INVALID_PARAMETER,值为0xC000000D。代表的意思是把一个无效的参数传递给了服务或函数(这里的服务是指Windows系统自身的服务,函数是指Windows系统内核函数)。它定义在 ntstatus.h头文件里,如下:

//
// MessageId: STATUS_INVALID_PARAMETER
//
// MessageText:
//
// An invalid parameter was passed to a service or function.
//
#define STATUS_INVALID_PARAMETER         ((NTSTATUS)0xC000000DL)    // winnt

异常填充结构

ExceptionAddress: 778e199f (ntdll!TppRaiseInvalidParameter+0x00000037)
ExceptionCode: c000000d//异常代码
ExceptionFlags: 00000000//这是一个可继续的异常
NumberParameters: 0

 

要查看SOS.dll版本,必然是Windbg已经加载了该文件。在这个前提下输入下面的命令:

!eeversion

例如:

0:000> !eeversion
4.0.30319.36543 retail
Workstation mode
SOS Version: 4.0.30319.36543 retail build

0:000> !eeversion
4.8.4110.0 retail
Workstation mode
SOS Version: 4.8.4121.0 retail build

 

简介

COR_E_NEWER_RUNTIME,值为0x8013101B,代表的意思是"程序集是由比当前加载的运行时新的运行时生成的,因此无法加载。".它定义在cli-2.0-master\clr\src\inc\corerror.h文件里,如下:

#define COR_E_NEWER_RUNTIME             EMAKEHR(0x101B)     //The assembly is built by a runtime newer than the currently loaded runtime, and cannot be loaded.