clr - 编写Iron Python调试器

标签 clr debugging ironpython

作为一项学习练习,我正在使用IronPython为自己编写一个简单的扩展/插件/宏框架-我已经掌握了基础知识,但我想添加一些基本的调试支持以使脚本编辑器更易于使用。

我已经在互联网上闲逛了一段时间,并且发现了一些编写托管调试器的好资源(包括Mike Stall的出色的.Net Debugging blogCLR Debugging API上的MSDN文档)-我知道IronPython本质上是IL,但是除了我有点不知道如何开始使用,尤其是:

  • 将动态语言(例如IronPython)调试为静态语言(例如C#)之间是否有显着差异?
  • 我是否需要以特殊的方式执行脚本以使IronPython输出适当的调试信息?
  • 是否正在调试在当前进程内运行的脚本会导致死锁,或者IronPython是否在子进程中执行我的脚本?
  • 我最好还是先研究一下如何制作一个简单的C#调试器以获得总体思路?

  • (我现在对制作调试器的GUI方面不感兴趣-我已经很好地知道了这可能如何工作)

    最佳答案

    其他一些链接已开始使这一点变得更加清晰-我看到了两种添加调试器支持的方式:

    将IronPython调试为CLR应用程序

    首先是利用IronPython发出IL并使用用于调试.Net应用程序的标准技术对其进行调试的事实。哈里·皮尔森(Harry Pierson)here撰写了一系列有关此方法的博客文章,内容涉及ipydbg(使用此方法的python调试器)的开发。

  • 有关公开.NET调试功能的位置及其周围的各种包装(mdbg)的详细信息,请参见this post
  • 这种方法的缺点是这种形式的调试会完全阻止正在调试的应用程序,因此您必须在第二个应用程序中执行脚本。

  • 使用Microsoft.Scripting.Debugging

    由于此限制,因此改而产生了Microsoft.Scripting.Debugging库,它更适合于运行“嵌入式” IronPython的应用程序(即在同一过程中)。

    关于here的介绍,以及有关如何使用here的更广泛的博客文章-本质上,它由一个回调函数组成,该回调函数在每次发生“有趣”的事件时都会执行(每次输入一个函数,每次从a返回时,功能以及每次执行一行时)。回调函数运行时,脚本的执行被阻止,这使您可以“破坏”脚本。

    我决定采用第二种方法-我会更新此文章,因为我发现更多信息可能会对其他尝试这样做的人有所帮助。

    关于clr - 编写Iron Python调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493557/

    相关文章:

    ironpython - 如何使用 IronPython 从 Spotfire 中的表的所有列中获取值

    IronPython 对 CLR 库的编译时检查?

    c# - IL 和参数

    c++ - 访问非托管代码中函数的指针

    java - 使用 Java 8 lambda 表达式打印有关错误的调试信息

    c - 当应用程序崩溃或被操作系统杀死时内存中会发生什么

    c++ - 桥接非托管类和托管类

    c# - x64 CLR 的好处

    c# - C# 和 vs2008 中的线程调试

    .net - ping/通知 .NET Windows 服务的最简单方法是什么?