【问题标题】:Disabled first-chance-exception but debugger stopps within try...catch when using IronPython禁用第一次机会异常,但调试器在使用 IronPython 时在 try...catch 内停止
【发布时间】:2015-08-24 00:58:16
【问题描述】:

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

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 中禁用了第一次机会异常,但调试器仍然在 throw 处停止。

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

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

如何禁用在 try...catch 块中执行的 python 代码调用的第一次机会异常?

【问题讨论】:

  • Python代码中是否包含try/catch?大概它没有,现在它确实是一个判断调用,应该位于调试器中断的“最佳”位置。可以预见的是,这不会出现在 Python 代码不再可运行并且异常的实际来源不再可见的地方。您必须删除该 C# 代码的 PDB 文件才能使调试器相信它不是“我的代码”。
  • 你看到了吗?不,它只包含Foo.Do()。我无法删除 PDB,因为还有很多其他代码需要正常调试。
  • 我没有看到,你没有发布你的 Python 代码。对它刻薄有什么意义吗?
  • 请看我贴出的 C# 代码:engine.CreateScriptSourceFromString("Foo.Do()"); 这里是...没有隐藏代码...

标签: c# exception ironpython first-chance-exception


【解决方案1】:

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

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

【讨论】:

  • 好主意。以前没有检查过。 ...此复选框未选中,但调试器仍然停止:-(
猜你喜欢
  • 2013-12-10
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2014-09-10
相关资源
最近更新 更多