调试工具

计算机程序

调试器(英语:Debugger)亦称调试程序调试工具,指一种用于调试其它程序的计算机程序及工具。能够让代码指令组模拟器(ISS)中可以检查运行状况以及选择性地运行,以便排错、调试。当开发的进度遇到瓶颈或找不出哪里有问题时,这技术将是非常有用的。但是将程序运行在调试器之下,这将比直接在运作的平台以及处理器上执行还要来得慢。

当程序当机时,如果调试器是属于来源阶段调试器(source-level debugger)或象征阶段调试器(symbolic debugger),调试器即可以显示出错误所在位置的原始码,并使其于集成开发环境里也能看见。要是属于低端调试器(low-level debugger)或机器语言调试器(machine-language debugger)的话,它将能显示的是一行一行的反汇编码(这里指的当机情况是指,当发生原因是因为程序员在设计上的疏失,使得程序无法继续正常执行的情况。例如程序尝试去调用某个对在该版本的CPU上而言是不合理的操作,或者是对保护或无法存取的存储器位置进行写入)。

典型的调试器通常能够在程序执行时拥有以下这些功能,例如单步执行(single-stepping)、利用中断点(breakpoint)使程序遇到各种种类的事件(event)时停止(breaking)(一般用于使程序停止在想要检查的状态)、以及追踪某些变量的变化。有些调试器也有能力在想要调试的程序在执行状态时,去改变它的状态,而不仅仅只是用来观察而已。

一个好的调试器存在的重要性不夸张。就算一个编程语言/平台在电脑的行程里运作非常良好。有无调试器以及调试器的好坏,对于一个编程语言及平台来说,经常是能不能正常执行的重要因素。总之,软件要能够(或经常)执行在不同的调试器下进行测试,是非常重要的。不过由于调试器出现将做对软件程序的内部时间的不可避免的变动。所以,即使是一个几近完美的调试器,在多工环境分布式系统下,它也会更难去测试到执行时(runtime)的问题。

一个调试器除了能够用来调试(debug),同样的,它也经常被用来作为破解软件的工具,像是用来跳过软件的防拷贝保护,还有破解序号验证,以及其它软件保护功能。

大部分的主流调试工程,譬如gdbdbx提供基于主控台的命令提示接口(console-based command line)。调试器前端应用,现在普遍是提供给集成式开发工具(IDE)做为调试引撆动态化可视化等特点。

硬件调试器

大部分现代微处理器它们都至少会拥有以下这些特点的其中一个包含在他们的CPU设计里,使得调试更加容易:

  • 硬件支持单步执行(single-steping)程序,以及设置旗标(flag)。
  • 利用Popek and Goldberg virtualization requirements指令组使它更加容易去设计调试软件,让调试软件能够在相同的CPU下执行时,有如使用纯软件调试一般。这样CPU就可能在测试程序时,以全速执行的状态下同时能够保持程序执行速度,并使得其仍然保持在调试器的控制之下。
  • 在系统编程允许一台外在硬件调试器,在测试时重新编辑一个程序系统,如增加或去除指示的中断点
  • 硬件支持资料中断点(breakpoint)的设置,譬如专门处理标签页错误的硬件的资料中断点的设置。
  • 设有JTAG

调试器列表

 
Winpdb debugging itself.

参见

参考资料

外部链接