在编写自己的"混合模式时,我如何与Visual Studios本机调试器进行交互?调试器?

时间:2016-06-03 11:50:58

标签: windows visual-studio debugging visual-studio-extensions dbgeng

我花了最近几天搜索谷歌,博客和MSDN寻找关于如何"互操作"的任何一小部分信息。或"混合模式"调试是在Visual Studio中实现的。

我试图为自定义VM实现我自己的调试器(实际上,它被JIT编辑为本机代码,这意味着每当它进入&#时,我必须为普通的本机调试器重建callstacks 39;是JIT编码),但是我找不到任何关于如何与VS的原生调试器进行实际交互的信息,并且可以做出奇特的本机/托管"就像VS的混合模式调试拉开的过渡一样。

到目前为止,我发现了一些提供有用花絮的东西,但还不足以实际与调试器交互。我发现的最好,最有用的文章是:

  • Mike Stall的各种博客文章(主要是these two)虽然提供了有用的信息和内部工作的一瞥,但它们似乎与.Net调试密切相关。
  • MSDN' Creating a Basic Debugger概述了MS如何实现它的调试器以及如何在同一个技术堆栈上实现一个。不幸的是,这并没有真正提供有关如何将数据传递给VS的本机调试器的真实信息。 (结合Mike Stall的博客,似乎两个调试器都在等待相同的事件,那么你如何以一种有意义的方式将结果拼接在一起?)
  • Debugger Engine API(又名DbgEng)文档。我通过在VS的本机调试引擎(NatDbgDE.dll上运行Dependency Walker)找到了这个,它似乎导出了我只能在本文档中找到的DebugCreate函数,因此它可能是相关的。不幸的是,即使通过这种方式进行任何调试,我也几乎没有成功,但它似乎记录不清,尽管文档似乎表明这是我最终可能想要处理的内容。它也没有真正说明我如何与另一个调试器协同工作,并且没有提及VS的调试器,所以无论如何我都可以完全走错路。

如何开始编写与VS的本机调试器协同工作的调试器?

谢谢!

1 个答案:

答案 0 :(得分:2)

我担心这个主题的文档不多。你提到的资源在这一点上都很老了。我的建议是与Visual Studio的新调试引擎(Concord)集成。 Concord用作调试引擎,用于从Visual Studio 2012向前进行本机调试,以及用于Visual Studio 2013中的所有调试。 Concord的设计目标之一是简化混合模式调试。它的设计也很容易扩展。

我创建了一些可能有帮助的Concord extensibility documentation。它主要关注表达式评估器,但它有一些很好的信息可以用于Concord。另一种可能有用的资源是source code for the Concord-based debugger in Python Tools for Visual Studio。这是一个混合模式调试器的完整实现,它与Concord集成,允许使用Python进行混合模式调试。