Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
C# 理解WinDbg输出_C#_C++_Exception_Dll_Windbg - Fatal编程技术网

C# 理解WinDbg输出

C# 理解WinDbg输出,c#,c++,exception,dll,windbg,C#,C++,Exception,Dll,Windbg,我有一个Winform应用程序(C#),它从dll导入一些函数 有时在运行应用程序时,我会遇到以下异常: System.AccessViolationException:尝试读取或写入受保护内存。 这通常表示其他内存已损坏 我在AppDomain.CurrentDomain.UnhandledException中捕获它 所以我试着用WinDbg调试它。我能够捕获异常并获得以下输出: !分析-v FAULTING_IP: KERNEL32!SetErrorMode+14b 77e6c427 8a

我有一个Winform应用程序(C#),它从dll导入一些函数

有时在运行应用程序时,我会遇到以下异常:

System.AccessViolationException:尝试读取或写入受保护内存。 这通常表示其他内存已损坏

我在AppDomain.CurrentDomain.UnhandledException中捕获它

所以我试着用WinDbg调试它。我能够捕获异常并获得以下输出:

!分析-v

FAULTING_IP: 
KERNEL32!SetErrorMode+14b
77e6c427 8a08            mov     cl,byte ptr [eax]

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 77e6c427 (KERNEL32!SetErrorMode+0x0000014b)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 087deadc
Attempt to read from address 087deadc

FAULTING_THREAD:  00000b1c

PROCESS_NAME:  App.exe

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s".

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s".

EXCEPTION_PARAMETER1:  00000000

EXCEPTION_PARAMETER2:  087deadc

READ_ADDRESS:  087deadc 

FOLLOWUP_IP: 
KERNEL32!SetErrorMode+14b
77e6c427 8a08            mov     cl,byte ptr [eax]

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

MANAGED_STACK: !dumpstack -EE
OS Thread Id: 0xb1c (34)
Current frame: 
ChildEBP RetAddr  Caller,Callee

ADDITIONAL_DEBUG_TEXT:  Followup set based on attribute [UnloadedModule_Arch_AX] from Frame:[0] on thread:[b1c] ; Enable Pageheap/AutoVerifer

DEFAULT_BUCKET_ID:  HEAP_CORRUPTION

PRIMARY_PROBLEM_CLASS:  HEAP_CORRUPTION

BUGCHECK_STR:  APPLICATION_FAULT_HEAP_CORRUPTION_INVALID_POINTER_READ

LAST_CONTROL_TRANSFER:  from 7a0aa797 to 77e6c427

STACK_TEXT:  
WARNING: Stack unwind information not available. Following frames may be wrong.
08bddc6c 7a0aa797 00000000 00000001 087deadc KERNEL32!SetErrorMode+0x14b
08bddd68 7c82a124 056306e8 08bddf9c 7c82a0b8 mscorwks!CorLaunchApplication+0x281f8
08bddd74 7c82a0b8 7c82a0fc 00000001 00000004 ntdll!RtlpAllocateFromHeapLookaside+0x13
08bddf9c 00000000 00000000 00000000 00000000 ntdll!RtlAllocateHeap+0x1dd


STACK_COMMAND:  .ecxr ; ~~[b1c] ; .frame 0 ; ~34s ; kb

SYMBOL_NAME:  ure.dll!Unloaded

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: ure.dll

IMAGE_NAME:  ure.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  750063

FAILURE_BUCKET_ID:  HEAP_CORRUPTION_c0000005_ure.dll!Unloaded

BUCKET_ID:  APPLICATION_FAULT_HEAP_CORRUPTION_INVALID_POINTER_READ_ure.dll!Unloaded

WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/App_exe/1_2009_403_12/49e707a9/KERNEL32_dll/5_2_3790_4062/46264680/c0000005/0002c427.htm?Retriage=1

Followup: MachineOwner

这是什么意思?我该怎么处理它呢


提前感谢您提供的任何提示

看起来
ure.dll
已卸载,对引用它的NLSANSITONUNICODEMULTIBYTETOWIDECHAR()的调用失败。您可以在
之前运行
.symfix
!分析-v
以确认这一点

这就是你要导入的DLL吗?如果没有,则表示内存已损坏。否则,错误可能在该DLL中。您是否使用P/Invoke导入它


是的,卸载的DLL信息已损坏。正如您可能猜到的,这是.NET的
culture.dll
,Windbg将其中的“cult”部分读取为时间戳和校验和。尝试重新启动并执行以下操作:

.symfix
sxe ud
g
当断点到达时:

kb
(这告诉Windbg运行直到卸载DLL,然后转储堆栈)

运行一段时间让模块卸载,然后执行以下命令。然后让Windbg运行,直到获得异常,然后再次执行此命令以进行比较:

db ntdll!RtlpUnloadEventTrace

(这是已卸载模块表的开始,该表已损坏。)

我不使用此dll。我的电脑上也没有。我以前从未听说过。不知道它为什么要加载它。但是,它被卸载:卸载的模块:00000001 4333ab5a ure.dll时间戳:星期二3月31日01:56:51 1970(00750063)校验和:0074006C也在执行时!analyze-v,在给出结果之前显示:**警告:无法验证ure.dll的时间戳***错误:模块加载已完成,但无法加载ure.dll帮助的符号!哦,是的,我没意识到!我需要在什么时候运行这些命令?就在考特之后?在分析之前?之后走之前?谢谢!:)在捕获异常之前。标记,运行命令。然后kb返回以下信息:ChildEBP RetAddr Args to Child警告:堆栈展开信息不可用。下面的框架可能是错误的。0dc9dc6c 7a0aa797 00000000000001 0522ea5c内核32!SetErrorMode+0x14b 0dc9dd68 7c82a124 056306e8 0dc9df9c 7c82a0b8 mscorwks!CorLaunchApplication+0x281f8 0dc9dd74 7c82a0b8 7c82a0fc 00000001 00000004 ntdll!RtlpAllocateFromHeapLookaside+0x13 0dc9df9c 00000000 00000000 00000000 00000000 ntdll!RTLALLOCATHEAP+0x1ddhowever在我运行analyze-v后,它仍然告诉我***警告:无法验证ure.dll的时间戳***错误:模块加载已完成,但无法加载ure.dll的符号