Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用SEHException分析Windows服务的崩溃转储_.net_.net 4.0_Windbg_Crash Dumps - Fatal编程技术网

.net 使用SEHException分析Windows服务的崩溃转储

.net 使用SEHException分析Windows服务的崩溃转储,.net,.net-4.0,windbg,crash-dumps,.net,.net 4.0,Windbg,Crash Dumps,我有一个用C#编写的windows生产服务,它针对的是.NETFramework4.0,它大约每天会断断续续地崩溃一次。运行服务的远程站点的系统管理员在发生最新崩溃时提取了一个转储文件。windbg中的分析显示其中一个线程抛出了SEHException: PreEmptive GC Alloc Lock ID OSID ThreadOBJ State GC

我有一个用C#编写的windows生产服务,它针对的是.NETFramework4.0,它大约每天会断断续续地崩溃一次。运行服务的远程站点的系统管理员在发生最新崩溃时提取了一个转储文件。windbg中的分析显示其中一个线程抛出了SEHException:

                                       PreEmptive   GC Alloc                Lock
       ID  OSID ThreadOBJ    State GC           Context       Domain   Count APT Exception
  22    c   cdc 051c2600   1009220 Enabled  0f6af244:0f6b04d4 0054b9e0     0 MTA (Threadpool Worker) System.Runtime.InteropServices.SEHException (0f43a964)
该线程的堆栈如下所示:

ChildEBP RetAddr  
091ee930 71fb28ca clr!JIT_Dbl2IntSSE2+0x6
091ee954 71fb239a mscorlib_ni+0x2728ca
091ee9ac 71fb2299 mscorlib_ni+0x27239a
091ee9c4 738e21db mscorlib_ni+0x272299
091ee9d4 73904a2a clr!CallDescrWorker+0x33
091eea50 73904bcc clr!CallDescrWorkerWithHandler+0x8e
091eeb94 73904c01 clr!MethodDesc::CallDescr+0x194
091eebb0 73969c29 clr!MethodDesc::CallTargetWorker+0x21
091eec90 73995c05 clr!QueueUserWorkItemManagedCallback+0x4b
091eeca4 73995c87 clr!Thread::DoExtraWorkForFinalizer+0x114
091eed54 73995d42 clr!Thread::ShouldChangeAbortToUnload+0x101
091eedb4 73995dd9 clr!Thread::ShouldChangeAbortToUnload+0x399
091eedd8 73a656d5 clr!Thread::ShouldChangeAbortToUnload+0x43a
091eedf0 73969b67 clr!ManagedThreadBase::ThreadPool+0x15
091eeebc 73a6525f clr!ManagedPerAppDomainTPCount::DispatchWorkItem+0xe6
091eef2c 73a66ac5 clr!ThreadpoolMgr::NewWorkerThreadStart+0x20b
091eef94 73995a08 clr!ThreadpoolMgr::WorkerThreadStart+0x3d1
091efab8 7679eccb clr!Thread::intermediateThreadProc+0x4b
091efac4 7715d24d kernel32!BaseThreadInitThunk+0xe
091efb04 7715d45f ntdll!__RtlUserThreadStart+0x23
091efb1c 00000000 ntdll!_RtlUserThreadStart+0x1b
ClassName:  System.Runtime.InteropServices.SEHException
  Message:  External component has thrown an exception.
  HResult:  -2147467259
ErrorCode:  -1073741132
SEHException中嵌入的数据如下所示:

ChildEBP RetAddr  
091ee930 71fb28ca clr!JIT_Dbl2IntSSE2+0x6
091ee954 71fb239a mscorlib_ni+0x2728ca
091ee9ac 71fb2299 mscorlib_ni+0x27239a
091ee9c4 738e21db mscorlib_ni+0x272299
091ee9d4 73904a2a clr!CallDescrWorker+0x33
091eea50 73904bcc clr!CallDescrWorkerWithHandler+0x8e
091eeb94 73904c01 clr!MethodDesc::CallDescr+0x194
091eebb0 73969c29 clr!MethodDesc::CallTargetWorker+0x21
091eec90 73995c05 clr!QueueUserWorkItemManagedCallback+0x4b
091eeca4 73995c87 clr!Thread::DoExtraWorkForFinalizer+0x114
091eed54 73995d42 clr!Thread::ShouldChangeAbortToUnload+0x101
091eedb4 73995dd9 clr!Thread::ShouldChangeAbortToUnload+0x399
091eedd8 73a656d5 clr!Thread::ShouldChangeAbortToUnload+0x43a
091eedf0 73969b67 clr!ManagedThreadBase::ThreadPool+0x15
091eeebc 73a6525f clr!ManagedPerAppDomainTPCount::DispatchWorkItem+0xe6
091eef2c 73a66ac5 clr!ThreadpoolMgr::NewWorkerThreadStart+0x20b
091eef94 73995a08 clr!ThreadpoolMgr::WorkerThreadStart+0x3d1
091efab8 7679eccb clr!Thread::intermediateThreadProc+0x4b
091efac4 7715d24d kernel32!BaseThreadInitThunk+0xe
091efb04 7715d45f ntdll!__RtlUserThreadStart+0x23
091efb1c 00000000 ntdll!_RtlUserThreadStart+0x1b
ClassName:  System.Runtime.InteropServices.SEHException
  Message:  External component has thrown an exception.
  HResult:  -2147467259
ErrorCode:  -1073741132

有没有想过是什么原因导致了这种情况,或者可以进行哪些额外的分析?

当您遇到这种错误时,请将代码转换为十六进制格式,即

HRESULT 80004005
Error Code C00002B4
那时谷歌搜索要好得多

80004005是E潎失败,非常一般的错误

C00002B4似乎是异常\u浮动\u多个\u故障

如果使用C++组件并指定/fp:严格或/FP:除了编译器开关,这与.NET不再兼容。请参见Microsoft。NET喜欢隐藏浮点异常

您可以通过声明

[DllImport("msvcr110.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int _controlfp(int n, int mask)
< > >调用C++代码后重置浮点行为:

CallMyCppCodeHere();
_controlfp(0x9001f, 0xfffff);

您在更改浮动处理器控制寄存器的过程中遇到了非托管代码。我还记得在这种情况下有一个MDA,但我现在还不知道它的名称。