在过去的几天里,我一直在搜索谷歌、博客和 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 的本机调试器协同工作的调试器?
谢谢!