使用IronPython时,禁用第一次机会异常但调试器在try ... catch中停止

Seb*_*ann 14 c# ironpython exception first-chance-exception

应该在不停止调试器的情况下执行以下代码:

var engine = Python.CreateEngine(AppDomain.CurrentDomain);
var source = engine.CreateScriptSourceFromString("Foo.Do()");
var compiledCode = source.Compile(new PythonCompilerOptions { Optimized = true });

try
{
    compiledCode.Execute(
         engine.CreateScope(
            new Dictionary<string, object> { 
                                            { "Foo", new Foo() }
                                           }));

    MessageBox.Show("Executed without error");
}
catch (Exception ex)
{
    MessageBox.Show(string.Format("Error at execution: {0}", ex.Message));
}
Run Code Online (Sandbox Code Playgroud)

使用这个类:

public class Foo
{
    public void Do()
    {
        throw new InvalidOperationException("The debugger should not break here...");
    }
}
Run Code Online (Sandbox Code Playgroud)

脚本执行在try-block中运行以处理任何异常.如果我有像1 / 0所有作品perfekt的代码.异常是在Python(或引擎)中创建的,我的catch块按预期调用,而不强制调试器在任何地方停止.

调用try { new Foo().Do(); } catch {}C#也可以在不停止调试器的情况下工作.

但是在python中调用的C#代码中抛出异常会强制调试器停在throw new...-line处.

我不希望调试器停在那里.

我禁用了第一次机会异常,Debug/Exceptions但调试器仍在停止时停止.

我无法使用,DebuggerStepThrough因为在我的工作代码中,它不会在此方法中引发但在代码中更深入的异常.代码也用在C#之外,用所有这些方法进行装饰DebuggerStepThrough将使我的C#调试器过时.

一个解决方案是禁用User-unhandled异常,Debug/Exceptions但我想打破用户未处理的异常,因此这不是一个选项.

我该怎么做才能禁用在try ... catch块中执行的python代码中调用的第一次机会异常?

out*_*red 1

最有可能的是,您在调试设置中选中了默认选项,导致出现此问题:

在此输入图像描述

确保该框未被选中,您就可以开始了。希望这有帮助!