Отладка сценариев IronPython в размещенной (встроенной) среде - PullRequest
28 голосов
/ 24 марта 2009

Я пишу приложение на C #, в которое встроен IronPython (2.0.1). Идея состоит в том, чтобы представить части приложения сценариям IronPython, которые пишут пользователи.

Я хочу предоставить пользователям возможность отлаживать написанные ими сценарии с помощью отладчика Visual Studio. Обратите внимание, что сценарии запускаются в размещенной среде, а не через исполняемый файл 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);

Я могу разместить точки останова в файлах сценария, и они получат удар при выполнении сценария.

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

Спасибо

Ответы [ 2 ]

39 голосов
/ 24 марта 2009

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

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

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

1 голос
/ 01 августа 2009

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

Microsoft.Scripting.Debugging

...