Подтвердить что ты не робот

Отладка скриптов 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.

Итак, есть ли лучший/простой способ сделать это?

Спасибо

4b9b3361

Ответ 1

ОК, понял. Существует словарь опций, который "Python.CreateEngine" может принимать в качестве аргумента. В этом можно указать режим отладки.

        Dictionary<string, object> options = new Dictionary<string, object>();
        options["Debug"] = true;
        engine = Python.CreateEngine(options);

Я думаю, что это достаточно просто.

Ответ 2

У Гарри Пирсона (DevHawk) есть сообщение в блоге по этой теме, которое поможет вам начать:

Microsoft.Scripting.Debugging