代码之家  ›  专栏  ›  技术社区  ›  Rohit

在托管(嵌入)环境中调试Ironpython脚本

  •  28
  • Rohit  · 技术社区  · 16 年前

    我正在编写一个C应用程序,其中嵌入了Ironpython(2.0.1)。其思想是将应用程序的某些部分公开给用户编写的Ironpython脚本。

    我希望向用户提供使用Visual Studio调试器调试他们编写的脚本的能力。请注意,脚本是在宿主环境中运行的,而不是通过Ironpython可执行文件(ipy.exe)运行的。

    在对Ironpython组件进行了一些反射魔法之后,我想出了一些可以让我这样做的方法,但我不确定这是否是规定的方法。基本上,我要做的是创建一个“scriptRuntime”对象,将“debugMode”属性设置为true,然后从“scriptRuntime”创建一个基于python的“scriptEngine”,我使用它作为宿主。下面的代码。

            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 回复  |  直到 16 年前
        1
  •  38
  •   Rohit    16 年前

    好的,明白了。有一个选项字典“python.createEngine”可以作为参数。可以在其中指定调试模式。

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

    我觉得这很简单。

        2
  •  1
  •   W. Kevin Hazzard    15 年前

    Harry Pierson(Devhawk)有一篇关于这个主题的博客文章,可以帮助你开始:

    Microsoft.Scripting.Debugging