应该在不停止调试器的情况下执行以下代码:
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-block中运行以处理任何异常。
如果我有像1 / 0
这样的代码,那么所有的作品都是完美的。异常是在Python(或引擎)中创建的,我的catch块按预期调用,而不强制调试器在任何地方停止。
在C#中调用try { new Foo().Do(); } catch {}
也可以在不停止调试器的情况下工作。
但是在C#中抛出异常,在python中调用的代码会强制调试器停在throw new...
行。
我不希望调试器停在那里。
我在Debug/Exceptions
中禁用了第一次机会异常,但调试器仍在停止时停止。
我无法使用DebuggerStepThrough
,因为在我的工作代码中,它不会在此方法中抛出异常,而是在代码中更深入。代码也用在C#之外,用DebuggerStepThrough
装饰所有这些方法将使我的C#调试器过时。
解决方案是在User-unhandled
中禁用Debug/Exceptions
个例外,但我想打破用户未处理的异常,因此这不是一个选项。
如何禁用在try ... catch块中执行的python代码调用的第一次机会异常?
答案 0 :(得分:1)
最有可能的是,您在调试设置中选中了导致此问题的默认选项:
确保未选中该框,您应该好好去。希望这有帮助!