我对C ++ / CLI不是很熟悉,但很久以前我做了一些C ++。我正在尝试调试AccessViolationException
我在JSContext::EvaluateScript
项目内的JSCore
方法内的WebKit.NET中。以下是导致异常的代码行:
JSValueRef result = NULL;
try
{
result = JSEvaluateScript(_context, jsScript, /*(JSObjectRef)jsObj*/NULL, NULL, 0, &exception);
}
catch(...)
{
}
此错误将随机发生。我知道_context
和jsScript
不为空。一个奇怪的事情是,当错误发生时,Program.cs文件打开,Application.Run(new Form1());
行上出现TargetInvocationException
的异常,但我可以在IntelliTrace中看到,在此之前就有这个{ {1}}发生在上面引用的行之前,所以我认为这是导致AccessViolationException
的异常。
另外,如果我在上面的行(TargetInvocationException
)和另一个断点之后设置一个断点,第一个会被击中,然后我按下F10而第二个不会被击中,所以应该在第一个例外发生例外。此外,result = JSEvaluateScript...
位于JSEvaluateScript
dll内部,因此我无法进入它。
但是,最初不存在的WebKit
似乎没有捕获异常,所以我不确定发生了什么。我能够通过在我的应用程序中执行一组操作来重现错误,但无法理解为什么这些操作会导致错误。大多数时候使用相同的参数调用try/catch
都不会导致异常。
有关如何诊断的建议吗?我没有想法。
编辑:我刚做了一些调试,错误也可能发生在其他一些随机行。所以我很确定与上面的那行无关。
编辑2:这是堆栈跟踪:
JSContext::EvaluateScript