4

可能重复:
为 .NET 语言构建调试器的好方法是什么?

我有一种 Lisp 风格的语言,我想为其构建调试器。我的语言在这里 - https://github.com/bryanedds/aml

我可能会将其编译为 IL。如果对编写调试器有帮助,我会先编写编译器。但是,我想知道构建调试器的一些方法是什么。我考虑为 Visual Studio 构建它,但这很困难,因为它似乎需要我通过 COM 与 VS 交互,这意味着我需要用 C 或 C++ 编写调试器(UGH!)。我希望 Visual Studio Debugger 开发有一个我不知道的更好的故事。

查看 SO 上 .NET 调试的其他线程,我发现 IL 包含源文件坐标,所以我想知道这是否意味着我不需要编写最初怀疑的那么多 COM 代码(EG - 步骤调试有效只要编译的 IL 具有源文件坐标,就可以在没有任何 COM 代码的情况下使用该框)。

或者,我可以考虑使用另一个 IDE,它可能对 .NET 语言调试有更好的路径。有 Eclipse,但它似乎对 .NET 语言调试没有任何特别的支持。

具有最佳调试器构建故事的 IDE 可能是 MonoDevelop。当然,我需要它与 MS .NET 一起工作,而不仅仅是 Mono。但是,它的文档相当简陋。有人有在那里构建调试器的经验吗?

所以,正如你所看到的,我相当迷失在这一切中。我只需要一些方法来构建一个带有断点的简单调试器,并为我的 .NET 语言使用变量检查进行单步调试。我更喜欢用 F# 编写大部分代码,因为那是我的语言所用的。

4

1 回答 1

7

如果您要使用System.Reflection.Emit将语言编译为 IL,那么使用您的代码(文件)生成调试信息也应该很容易pdb,Visual Studio 会自动获取该信息(因此您不必编写调试器) .

  • Emitting Symbolic Information with Reflection Emit on MSDN 有一些关于这方面的信息。

  • 你也可以看一下TickSpec源代码,它是用 F# 编写的,并使用它在描述测试场景的文件中启用调试(如果你看视频,在主页上,你可以看到他可以放置断点在文本文件中)。

我不认为为 .NET 语言编写调试器是您需要的——Visual Studio 中已经有一个非常好的调试器,因此您只需要启用您的语言即可使用它。

于 2012-09-10T16:57:46.680 回答