3

我在哪里可以找到设计和开发调试器的好教程?我搜索了低谷,但我只找到了几篇关于这个主题的一般文章。我需要了解更多细节:它是如何附加到应用程序的,它如何以及在内存中的何处设置断点,它如何读取堆栈跟踪?另外,我对调试器的一般设计感兴趣。

4

3 回答 3

6

编写调试器并非易事,它需要对您正在使用的底层平台和编写调试器的语言有深入的了解。

我过去看到的一些文章对这个主题特别有帮助:

  • Eli Bendersky 的“调试器如何工作”。由于它的彻底性,我发现这很有帮助。他涵盖了调试器的所有重要部分,它是如何工作的,以及它是如何在后台完成的。他甚至涵盖了相当多的关于使用 dwarf 调试格式来帮助注释调试会话的内容,由于缺乏可访问的文档,这个主题很难获得。尽管他在类似 *nix 的平台中介绍了这一点,但他描述的许多概念仍然同样适用于 Windows。
  • DebugInfo.com调试 API 示例。如果您打算在 win32 平台上工作,那么您会发现这里的示例很有用。这个展示了如何使用 win32 调试 api 创建一个可以像调试器一样“行动”的进程的实际示例。它包含有关如何启动调试对象或附加到正在运行的进程以及处理从调试 api 生成的调试事件的示例。
  • 移动调试。这是一个在 ~1.4kloc 中用纯 lua 实现的远程 lua 调试器。这个补充在 ruby​​ 调试器上的 deivid 答案。很多时候,查看调试器的实际实现是有帮助的,即使它不是针对低级语言的。这可能是一个更容易开始全面了解调试器必须做什么的地方,而不会陷入您必须用“裸机”语言处理的所有较低级别的细节。
  • pydbg。使用下面的调试 API 用 python 编写的 Windows 调试器。
  • 犹太数据库。另一个用 python 编写的 windows 调试器。比 pydbg 小一点,并且没有四舍五入的功能,但如果您正在寻找一个示例实现来学习,那就太好了。
  • MSDN 调试 API。Windows 提供的基本调试原语和构建块的主要参考和文档。如果为 Windows 开发自己的调试器,您将需要这里提供的许多东西。
于 2013-09-10T20:06:17.497 回答
3

抱歉,我不知道任何这样的指南...我的建议是选择您选择的开源编程语言并阅读调试器的源代码...这就是我所做的并且它有效。

举个具体的例子,我知道 ruby​​ 调试器。

  • 它通过为“指令执行”、“方法调用”或“方法返回”等特定事件设置一些跟踪点并为它们定义跟踪事件的回调函数来工作。例如,当要执行一条指令时,调试器会控制并检查该行中是否有断点。然后它根据先前的检查将控制权返回给用户或正在调试的程序。
  • 断点由调试器保存在全局变量中。
  • 堆栈跟踪正常检查(ruby 提供了执行此操作的工具)。
于 2013-08-27T16:37:20.243 回答
2

你正面临着实现这一目标的漫长旅程。它也在我的 TODO 列表中;)查看 tuts4you 和 codeproject,他们有一些很好的教程。

于 2013-08-27T17:39:11.200 回答