C# windbg、.net 4,随机访问冲突,无法获取托管堆栈跟踪
我有一个非常奇怪的问题,我正在努力寻找它。.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的评论之后,这里是我的结果!验证堆和它爆炸的堆的转储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并创建一组用于创建要发送的通知的其他记录。有大量数据被添加/转换,因此,我
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.