在C#中托管IronPyton和调试

已加入
2019年12月11日
留言内容
13
编程经验
1-3
你好,

我正在构建基于GUI的脚本编辑器应用程序(使用 块状)以从块获取python代码。它是C#和IronPython的结合。我正在使用IronPython作为后台引擎来执行用户创建的python脚本。下面的第一个屏幕截图显示了IronPython在CSharp中的集成。
我可以一次性执行脚本,并在控制台窗口中在执行结束时获得结果,但是我想控制执行流程。我想在py脚本运行时(在运行时)添加断点,进入,退出等操作。作为参考,这是NI TestStand软件的第二张屏幕截图,其中脚本的执行是逐步完成的,脚本的下一步等待上一步完全执行。那么,如何使用IronPython API实现调试功能?是否可以使用Microsoft.Scripting.Debugger类在软件中提供调试选项?
我是C#和Python的新手,并且一路学习。因此,我搜索了很多有关附加调试器过程的信息,但不确定如何实现它。
很少查询-
1.在这里,我可以使用PDB python调试器在IronPython中实现调试功能吗?
2.如何将调试器附加到IronPython引擎?
3.我读到有关Microsoft.System.Diagnostic.debug类的信息,或者还有其他方法吗?希望从这个社区论坛获得指导。

CSharp_IronPython_App-

IronPython_Csharp.png


NI Teststand ...
NI Teststand.png
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
我从未托管过需要步进/调试的DLR。它始终是加载和执行的,因此请使用大量的盐。

看来您在正确的轨道上。以下博客文章悬挂了许多提示:

根据我在那里的阅读情况,如果您是托管的,则可以使用类似pdb的功能,因此不必单独运行pdb。
 
已加入
2019年12月11日
留言内容
13
编程经验
1-3
感谢您提供该链接。理想情况下,我想使用C#环境中的调试器程序,以便在python文件处于IronPython引擎下的执行模式下时,可以轻松控制附加断点,进入/退出过程。
现在还不确定我将如何在这里集成不同的东西。例如Ironpython引擎+附加C#调试器过程,然后显示断点,以及使用Blockly组件在GUI级别逐步执行指针。但是我有信心,我会找到所有方法来完成这项工作。其他要点-
1.我正在探索如何使用微软脚本调试类方法来添加调试功能。但没有找到相关文档的详细信息。
2.我还找到了另一个工具 可执行文件 这也是一个外部调试器程序。 下载 并提取内容。我可以看到调试器的整个VS代码sln实现。我相信这可以帮助我集成到脚本编辑器程序中。 @跳伞 您能看看一次吗?很高兴听到您对此的想法。

创建这样的脚本编辑器似乎是一项艰巨的任务,目前完全处于研究阶段。希望能从不同经验的开发人员那里得到更多的反馈。谢谢!周末愉快。 :)
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
已加入
2019年12月11日
留言内容
13
编程经验
1-3
我想您会发现这对于实现Python脚本调试器更有意义:

以及调试器的相应源代码:
是的..我在调试中发现了一些东西。在那工作。但是,这是我面临的一个小问题。
目前,我能够执行Testscript.py。我被困住了,因为我无法访问我需要的所有属性。但是当我在Visual Studio中调试并探索对象时"CalcObj" Or "Scope" or "engine",我可以清楚地看到我想要访问的属性和非公共成员对象(键值对),例如PY文件(添加,子等)中定义的函数,参数(第一,第二)。
我想在c#中提取所有这些密钥对值并存储在数组或列表中,以供以后在代码中使用。我尝试了几种方法,但毫无头绪。任何的想法?
 

附件

  • AccessAddProperties.png
    AccessAddProperties.png
    414.6 KB · Views: 11
  • First_Second_variables.png
    First_Second_variables.png
    243.7 KB · Views: 9
  • UnableToAccessObjectProperties.png
    UnableToAccessObjectProperties.png
    356.9 KB · Views: 11

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
最佳 底部