确定System.AccessViolationException的原因

时间:2009-07-01 06:28:46

标签: .net debugging access-violation

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

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

我拥有所有内容的来源,但(如果可能的话)我想避免进行大量更改。

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

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

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

1 个答案:

答案 0 :(得分:2)

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