C# 禁用了首次机会异常,但在使用IronPython时,调试器在try…catch中停止

C# 禁用了首次机会异常,但在使用IronPython时,调试器在try…catch中停止,c#,exception,ironpython,first-chance-exception,C#,Exception,Ironpython,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.Ex

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

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));
}
脚本执行在try块中运行,以处理任何异常。 如果我有像
1/0
这样的代码,所有工作都会顺利完成。异常是在Python中(或在引擎中)创建的,并按预期调用my catch块,而不强制调试器在任何地方停止

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

但是在python中调用的C#代码中抛出异常将迫使调试器在
抛出新…
行停止

我不希望调试器就此停止

我在
Debug/exceptions
中禁用了first chance异常,但调试器仍然在抛出时停止

我不能使用
DebuggerStepThrough
,因为在我的工作代码中,异常不是在这个方法中抛出的,而是在代码中抛出的。代码也在C#之外使用,用
DebuggerStepThrough
装饰所有这些方法将使我的C#调试器过时

解决方案是在
Debug/exceptions
中也禁用
User unhandled
异常,但我希望在用户未处理的异常处中断,因此这不是一个选项


如何禁用在try…catch块中执行的python代码中调用的first chance异常?

最有可能的是,您在调试设置中选中了一个默认选项,导致了以下情况:


确保该框未选中,您应该可以继续。希望这有帮助

Python代码是否包含try/catch?想必不是这样,现在它确实变成了一个判断调用,调试器中断的“最佳”位置应该在这里。在某种程度上可以预见,在Python代码不再可运行且异常的实际源不再可见的情况下,这将不会发生。您必须删除该C代码的PDB文件,以使调试器确信它不是“我的代码”。您看到了吗?不,它只包含
Foo.Do()
。我无法删除PDB,因为还有很多其他代码需要正常调试。我没有看到任何代码,您没有发布Python代码。对它嗤之以鼻有什么意义吗?请看看我发布的C代码:
engine.CreateScriptSourceFromString(“Foo.Do()”)在这里。。。没有隐藏的代码…好主意。我以前没有检查过。。。此复选框未选中,但调试器仍会停止:-(
public class Foo
{
    public void Do()
    {
        throw new InvalidOperationException("The debugger should not break here...");
    }
}