Estoy escribiendo una aplicación de C# que tiene IronPython (2.0.1) incrustado en ella. La idea es exponer porciones de la aplicación a los scripts de IronPython, que los usuarios escriben.Depuración de scripts de IronPython en entorno alojado (incrustado)
Quiero ofrecer a los usuarios la capacidad de poder depurar los scripts escritos por ellos, utilizando el Visual Studio Debugger. Tenga en cuenta que los scripts se ejecutan en el entorno alojado y no a través del ejecutable de IronPython (ipy.exe).
Después de un poco de magia Reflector en los ensamblajes de IronPython, se me ocurrió algo que me permite hacerlo, pero no estoy seguro de si esta es la manera prescrita. Básicamente lo que hago es crear un objeto "ScriptRuntime" con la propiedad "DebugMode" establecida en true y luego crear un "ScriptEngine" basado en python desde "ScriptRuntime", que utilizo para el alojamiento. Código a continuación.
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);
Ahora, cuando ejecuta los guiones en el entorno alojado, usando:
ScriptSource script = engine.CreateScriptSourceFromFile(path);
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
puedo colocar puntos de interrupción en los archivos de comandos y recibe un golpe, cuando se ejecuta la secuencia de comandos.
Entonces, ¿hay una forma mejor/más fácil de hacer esto?
Gracias
Esta es una pregunta bastante viejo/respuesta - es esta solución se espera trabajar con las herramientas de Python con Visual Studio (¿No está seguro de cómo el "depurador visual studio" funcionó con python en 2009)? Probé este fragmento y el que está en la respuesta aceptada, pero no puedo acceder a ningún punto de interrupción en mi script ironpython .py. Intentó VS 2013 y 2015 sin suerte ... – Joe
Parece que ha encontrado su respuesta, gracias por compartirla en mi pregunta. – Kaerber