Отладка скриптов IronPython в размещенной (внедренной) среде
Я пишу приложение С#, в которое встроен IronPython (2.0.1). Идея состоит в том, чтобы разоблачить части приложения на скрипты IronPython, которые пользователи пишут.
Я хочу предоставить пользователям возможность отлаживать написанные ими сценарии с помощью Visual Studio Debugger. Обратите внимание, что сценарии запускаются в размещенной среде, а не через исполняемый файл IronPython (ipy.exe).
После немного магии Reflector на сборках IronPython я придумал что-то, что позволяет мне это делать, но я не уверен, что это предписанный путь. В основном, я создаю объект ScriptRuntime с свойством "DebugMode", установленным в true, а затем создаю "ScriptEngine" на основе python из "ScriptRuntime", который я использую для хостинга. Код ниже.
ScriptRuntimeSetup setup = new ScriptRuntimeSetup();
setup.DebugMode = true;
setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));
ScriptRuntime runtime = new ScriptRuntime(setup);
ScriptEngine engine = runtime.GetEngineByTypeName(typeof(PythonContext).AssemblyQualifiedName);
Теперь, когда я запускаю сценарии в размещенной среде, используя:
ScriptSource script = engine.CreateScriptSourceFromFile(path);
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Я могу разместить точки останова в файлах script, и они попадают, когда выполняется script.
Итак, есть ли лучший/простой способ сделать это?
Спасибо
Ответы
Ответ 1
ОК, понял. Существует словарь опций, который "Python.CreateEngine" может принимать в качестве аргумента. В этом можно указать режим отладки.
Dictionary<string, object> options = new Dictionary<string, object>();
options["Debug"] = true;
engine = Python.CreateEngine(options);
Я думаю, что это достаточно просто.
Ответ 2
У Гарри Пирсона (DevHawk) есть сообщение в блоге по этой теме, которое поможет вам начать:
Microsoft.Scripting.Debugging