1

在过去的几天里,我一直在搜索谷歌、博客和 MSDN,寻找有关如何在 Visual Studio 中实现“互操作”或“混合模式”调试的任何一小部分信息。

我正在尝试为自定义 VM 实现我自己的调试器(实际上,它被 JIT 编译为本机代码,这意味着每当它进入 JIT 编译代码时,我都必须为普通本机调试器重建调用堆栈),但是我找不到任何有关如何与 VS 的本机调试器进行实际交互以及如何进行花哨的“本机/托管”转换的信息,例如 VS 的混合模式调试完成的转换。

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

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

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

谢谢!

4

1 回答 1

2

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

我创建了一些可能有帮助的Concord 可扩展性文档。它主要侧重于表达式评估器,但它提供了一些关于 Concord 入门的好信息。另一个可能有用的资源是Python Tools for Visual Studio 中基于 Concord 的调试器的源代码。这是与 Concord 集成并允许使用 Python 进行混合模式调试的混合模式调试器的完整实现。

于 2016-06-03T18:01:06.760 回答