确定System.AccessViolationException的原因

oku*_*ane 6 .net debugging access-violation

我们从本机代码抛出了非确定性的System.AccessViolationException.重现它很难,但有时它会发生.我不确定我是否可以"只调试它",因为访问冲突所需的时间大约是2小时,并且无法保证会发生访问冲突.

托管包装器使用本机库.它从java到JNI使用,它从.NET到IKVM的JNI使用.该问题仅在IKVM代码期间重现,但数据集不同,无法使用IKVM应用程序使用的数据测试Java应用程序.

我有一切的来源,但(如果可能的话)我想避免进行大量的更改.

我相信本机调用堆栈将提供有关此访问冲突原因的足够信息.

有没有有效的方法来确定此访问违规的原因?

我认为对我来说理想的解决方案是代码或进程环境中的一些更改,因此在发生此访问冲突时会因内存转储而崩溃,因此我可以进行更改并等待.

Ste*_*idi 2

如果您可以等待异常发生,请附加托管调试器和本机调试器(混合调试会话),并将托管调试器设置为在AccessViolationException引发异常时中断。托管调试器在检测到未处理的异常时将中断进程,然后您应该能够看到本机调用堆栈。