调试器创建教程

时间:2013-08-27 11:32:21

标签: debugging

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

3 个答案:

答案 0 :(得分:5)

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

我过去遇到的一些文章我发现这个主题特别有用:

  • Eli Bendersky的“How debuggers work”。由于其彻底性,我发现这非常有用。他涵盖了调试器所做的所有重要部分,它是如何工作的以及它如何在幕后完成。他甚至介绍了使用矮调试格式来帮助注释调试会话,这是一个很难找到的主题,因为它没有可访问的文档。尽管他在类似* nix的平台中涵盖了这一点,但他描述的许多概念仍然适用于Windows。
  • DebugInfo.com DEBUGGING API EXAMPLES。如果您打算在win32平台上工作,那么您会发现这里的示例非常有用。这个展示了如何使用win32调试api创建一个可以像调试器一样“行动”的进程的实际示例。它包含有关如何启动调试对象或附加到正在运行的进程以及处理从debug api生成的调试事件的示例。
  • MobDebug。这是一个远程lua调试器,在~1.4kloc中以纯lua实现。这个补充是对ruby调试器的deivid的回答。很多时候,即使不是低级语言,查看调试器的实际实现也很有帮助。这可能是一个更容易的地方,可以全面了解调试器必须执行的操作,而不会陷入“裸机”语言中必须处理的所有较低级别详细信息。
  • pydbg 即可。使用下面的调试API在python中编写的Windows调试器。
  • jewdbg 即可。另一个用python编写的windows调试器。比pydbg小一点而不是功能四舍五入,但如果您正在寻找一个示例实现来学习,那就太棒了。
  • MSDN Debugging API 即可。主要参考& Windows提供的基本调试原语和构建块的文档。如果为Windows开发自己的调试器,则需要提供此处提供的许多功能。

答案 1 :(得分:3)

抱歉,我不知道任何类似的指南...我的建议是选择您选择的开源编程语言并阅读调试器的源代码......那就是我做了什么,它的工作原理。

对于一个具体的例子,我知道ruby调试器。

  • 它的工作原理是为特定事件设置一些跟踪点,例如'指令执行'方法调用'或者'方法返回'并为它们定义回调函数以跟踪事物。例如,当要执行指令时,调试器将控制并检查该行中是否存在断点。然后它将控制权返回给用户或正在调试的程序,具体取决于先前的检查。
  • 调试器将断点保存在全局变量中。
  • 正常检查堆栈跟踪(ruby提供了执行此操作的工具)。

答案 2 :(得分:2)

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

相关问题