可能重复:
What is a good approach to building a debugger for a .NET language?
我有一个Lisp风格的语言,我想为它构建一个调试器。我的语言在这里 - https://github.com/bryanedds/aml。
我可能会把它编译成IL。如果它对编写调试器很有帮助,我会先编写编译器。但是,我想知道构建调试器的方法是什么。我看着为Visual Studio构建它,但这很困难,因为它似乎要求我通过COM与VS连接,这意味着我需要用C或C ++编写调试器(UGH!)。我希望Visual Studio Debugger开发有一个我不知道的更好的故事。
在SO上查看关于.NET调试的其他线程,我看到IL包含源文件坐标,所以我想知道这是否意味着我不需要编写尽可能多的COM代码(EG - step只要编译的IL具有源文件坐标,调试就可以在没有任何COM代码的情况下开箱即用。
或者,我可以看一下使用另一个IDE,它可能有更快乐的.NET语言调试路径。有Eclipse,但它似乎没有任何特定的.NET语言调试支持。
也许具有最佳调试器构建故事的IDE可能是MonoDevelop。当然,我需要它来使用MS .NET而不仅仅是Mono。但是,它的文档相当简单。有人有建立调试器的经验吗?
所以,正如你所看到的,我很遗憾这一切。我只需要一些方法来构建一个简单的调试器,其中包含断点和步进调试,并对我的.NET语言进行可变检查。我更喜欢在F#中编写大部分代码,因为这就是我的语言。
答案 0 :(得分:7)
如果您要使用System.Reflection.Emit
将语言编译为IL,那么使用您的代码(pdb
文件)生成调试信息应该非常容易,Visual Studio会选择自动启动(因此您不必编写调试器)。
您还可以查看使用F#编写的TickSpec源代码,并使用此代码在描述测试场景的文件中启用调试(如果您在家中查看视频)在页面中,您可以看到他可以在文本文件中放置断点)。
我不认为编写.NET语言的调试器是你需要的 - 在Visual Studio中已经有一个非常好的调试器,所以你只需要启用你的语言来使用它。