6

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

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

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

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

是否有任何有效的方法来确定这种访问违规的原因?

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

4

1 回答 1

2

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

于 2009-07-01T06:52:46.760 回答