13

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

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));
}

使用这个类:

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

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

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

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

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

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

我不能使用DebuggerStepThrough,因为在我的工作代码中,它没有在此方法中抛出异常,而是在代码中更深层次。该代码也用于 C# 之外,并且用所有这些方法装饰DebuggerStepThrough将使我的 C# 调试器过时。

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

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

4

1 回答 1

1

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

在此处输入图像描述

确保未选中该框,您应该一切顺利。希望这会有所帮助!

于 2015-07-14T16:17:09.177 回答