Отключен первый шанс-исключение, но отладчик останавливается внутри try... catch при использовании IronPython

Следующий код должен быть выполнен без остановки отладчика:

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

Выполнение script выполняется в блоке try для обработки любого исключения. Если у меня есть код вроде 1 / 0, все работает отлично. Исключение создается в Python (или в движке), и мой catch-блок вызывается как ожидалось, не заставляя отладчик останавливаться где-нибудь.

Вызов try { new Foo().Do(); } catch {} в С# также работает без остановки отладчика.

Но выдача исключения в С# -коде, который вызывается в python, заставит отладчик остановиться на throw new... -line.

Я не хочу, чтобы отладчик останавливался там.

Я отключил исключения с первым шансом в Debug/Exceptions, но отладчик все еще останавливается при броске.

Я не могу использовать DebuggerStepThrough, потому что в моем рабочем коде исключение оно не выбрасывается в этот метод, а глубже в коде. Код также используется из С# и декорирования всех этих методов с помощью DebuggerStepThrough сделает мой отладчик С# устаревшим.

Решение состоит в том, чтобы отключить исключения User-unhandled в Debug/Exceptions, но я хочу нарушить исключения, которые не обрабатываются пользователем, поэтому это не вариант.

Что я могу сделать, чтобы отключить исключение first-chance из кода python, выполненного в блоке try... catch?

Ответы

Ответ 1

Скорее всего, у вас есть опция по умолчанию, установленная в настройках вашей отладки, которая вызывает это:

enter image description here

Убедитесь, что флажок не установлен, и вы должны быть добрым. Надеюсь, это поможет!