Ответ 1
Скорее всего, у вас есть опция по умолчанию, установленная в настройках вашей отладки, которая вызывает это:
Убедитесь, что флажок не установлен, и вы должны быть добрым. Надеюсь, это поможет!
Следующий код должен быть выполнен без остановки отладчика:
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?
Скорее всего, у вас есть опция по умолчанию, установленная в настройках вашей отладки, которая вызывает это:
Убедитесь, что флажок не установлен, и вы должны быть добрым. Надеюсь, это поможет!