【发布时间】:2009-03-24 04:52:53
【问题描述】:
我正在编写一个嵌入了 IronPython (2.0.1) 的 C# 应用程序。这个想法是将应用程序的一部分暴露给用户编写的 IronPython 脚本。
我希望让用户能够使用 Visual Studio 调试器调试他们编写的脚本。请注意,脚本在托管环境中运行,而不是通过 IronPython 可执行文件 (ipy.exe)。
在 IronPython 程序集上使用了一点 Reflector 魔法后,我想出了一些可以让我做到这一点的方法,但我不确定这是否是规定的方式。基本上我所做的是创建一个“DebugMode”属性设置为true的“ScriptRuntime”对象,然后从“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);
我可以在脚本文件中放置断点,当脚本执行时它们会被命中。
那么,有没有更好/更简单的方法来做到这一点?
谢谢
【问题讨论】:
-
这是一个非常古老的问题/答案 - 这个解决方案是否有望与带有 Visual Studio 的 Python 工具一起使用(不太确定“Visual Studio 调试器”在 2009 年是如何与 python 一起工作的)?我尝试了这个 sn-p 和接受的答案中的那个,但在我的 ironpython .py 脚本中无法命中任何断点。尝试 VS 2013 和 2015 没有运气...
-
您似乎找到了答案,感谢您在我的问题中分享。
标签: .net debugging ironpython