Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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、.net 4,随机访问冲突,无法获取托管堆栈跟踪_C#_.net 4.0_Windbg_Access Violation_Managed - Fatal编程技术网

C# windbg、.net 4,随机访问冲突,无法获取托管堆栈跟踪

C# windbg、.net 4,随机访问冲突,无法获取托管堆栈跟踪,c#,.net-4.0,windbg,access-violation,managed,C#,.net 4.0,Windbg,Access Violation,Managed,我有一个非常奇怪的问题,我正在努力寻找它。.Net4中的访问\u冲突。以下是一些我个人认为可能导致异常的背景信息 1我有一个进程,它监视一个文件,获取该文件并使用.net中的SqlBulkCopy将其转储到数据库中 2然后,它遍历数据库中的文件记录,在完成时将它们标记为已处理,每组记录在多个线程中处理,因为每组可能需要一段时间。处理组后,它会标记通过存储过程处理的组中的记录。 2a处理这些组时,它使用SqlBulkCopy并创建一组用于创建要发送的通知的其他记录。有大量数据被添加/转换,因此,我

我有一个非常奇怪的问题,我正在努力寻找它。.Net4中的访问\u冲突。以下是一些我个人认为可能导致异常的背景信息

1我有一个进程,它监视一个文件,获取该文件并使用.net中的SqlBulkCopy将其转储到数据库中

2然后,它遍历数据库中的文件记录,在完成时将它们标记为已处理,每组记录在多个线程中处理,因为每组可能需要一段时间。处理组后,它会标记通过存储过程处理的组中的记录。 2a处理这些组时,它使用SqlBulkCopy并创建一组用于创建要发送的通知的其他记录。有大量数据被添加/转换,因此,我发现SqlBulkCopy是目前为止最快的方法,否则使用EntityFramework将这么多数据放入数据库只需要很长时间

3在从成功生成的通知数据创建通知的线程中,它可以在创建通知之前加密一些数据

4从数据库中删除旧数据

注意:我的代码使用标准的.Net4库,没有非托管调用

这些进程都在以系统用户身份运行的Windows服务下运行。 我在描述我的问题时尽量冗长,因为似乎没有人有类似的问题

以下是我尝试过但没有成功的事情。 1将服务作为控制台应用程序运行。 2将文件处理更改为单个线程而不是多个线程。 3锁定一个对象以防止多个副本同时出现。 4将WinDbg附加到进程以尝试捕获异常并找出其崩溃的位置—我无法捕获它。我试着使用WinDbg,因为它看起来应该捕获异常……它没有,也许我错过了加载某个模块,或者告诉我捕获/忽略某个异常

这是我的WinDbg命令及其输出。我对WinDbg了解不多,所以它只是在黑暗中拍摄

提前感谢您的帮助, --

我对WinDbg非常困惑,只是在黑暗中拍摄,希望获得CLR堆栈跟踪,但从非托管代码的堆栈跟踪判断,WinDbg事后捕获了它

有人对原因和/或解决方法有什么想法吗? 或者有什么关于未来的见解

在Hans的评论之后,这里是我的结果!验证堆和它爆炸的堆的转储

0:000> !VerifyHeap
-verify will only produce output if there are errors in the heap
object 0000000002832a90: does not have valid MT
curr_object:      0000000002832a90
Last good object: 0000000002832a78
----------------
0:000> !do 0x2832a78
Free Object
Size:        24(0x18) bytes
0:000> dc 0x2832a78
00000000`02832a78  0055cd90 00000000 00000000 00000000  ..U.............
00000000`02832a88  0055cd90 00000000 000000b0 00000000  ..U.............
00000000`02832a98  000000a8 000007ff 00000000 00010000  ................
00000000`02832aa8  f2792140 000007fe 00453480 000007ff  @!y......4E.....
00000000`02832ab8  00000000 00010000 f2792140 000007fe  ........@!y.....
00000000`02832ac8  00453758 000007ff 00000000 00010000  X7E.............
00000000`02832ad8  f2792140 000007fe 00453a30 000007ff  @!y.....0:E.....
00000000`02832ae8  00000000 00010000 f2792140 000007fe  ........@!y.....
0:000> d
00000000`02832af8  004534f0 000007ff 00000000 00010000  .4E.............
00000000`02832b08  f2792140 000007fe 0045f2c0 000007ff  @!y.......E.....
00000000`02832b18  00000000 00010000 f2792140 000007fe  ........@!y.....
00000000`02832b28  004b1590 000007ff 000000d8 00000000  ..K.............
00000000`02832b38  ffffff28 ffffffff 00000000 000007ff  (...............
00000000`02832b48  00000000 00000000 f1db6728 000007fe  ........(g......
00000000`02832b58  00000064 00450053 0045004c 00540043  d...S.E.L.E.C.T.
00000000`02832b68  00560020 004c0041 00450055 00440020   .V.A.L.U.E. .D.

它在运行垃圾收集时爆炸。这是一个典型的发现堆损坏的常见时间。堆栈跟踪没有用处,损坏发生在不久前。调试非常困难,请首先查找非托管代码或错误的pinvoke声明。禁用代码块和大量单元测试是缩小范围的最佳方法。感谢您的帮助,我运行了一个!在内存转储上执行VerifyHeap命令,它返回时指出一个对象没有有效的MT。我用堆损坏的一些windbg输出更新了我的原始帖子。有什么见解吗?
0:000> !VerifyHeap
-verify will only produce output if there are errors in the heap
object 0000000002832a90: does not have valid MT
curr_object:      0000000002832a90
Last good object: 0000000002832a78
----------------
0:000> !do 0x2832a78
Free Object
Size:        24(0x18) bytes
0:000> dc 0x2832a78
00000000`02832a78  0055cd90 00000000 00000000 00000000  ..U.............
00000000`02832a88  0055cd90 00000000 000000b0 00000000  ..U.............
00000000`02832a98  000000a8 000007ff 00000000 00010000  ................
00000000`02832aa8  f2792140 000007fe 00453480 000007ff  @!y......4E.....
00000000`02832ab8  00000000 00010000 f2792140 000007fe  ........@!y.....
00000000`02832ac8  00453758 000007ff 00000000 00010000  X7E.............
00000000`02832ad8  f2792140 000007fe 00453a30 000007ff  @!y.....0:E.....
00000000`02832ae8  00000000 00010000 f2792140 000007fe  ........@!y.....
0:000> d
00000000`02832af8  004534f0 000007ff 00000000 00010000  .4E.............
00000000`02832b08  f2792140 000007fe 0045f2c0 000007ff  @!y.......E.....
00000000`02832b18  00000000 00010000 f2792140 000007fe  ........@!y.....
00000000`02832b28  004b1590 000007ff 000000d8 00000000  ..K.............
00000000`02832b38  ffffff28 ffffffff 00000000 000007ff  (...............
00000000`02832b48  00000000 00000000 f1db6728 000007fe  ........(g......
00000000`02832b58  00000064 00450053 0045004c 00540043  d...S.E.L.E.C.T.
00000000`02832b68  00560020 004c0041 00450055 00440020   .V.A.L.U.E. .D.