调试器

编辑
本词条由“匿名用户” 建档。

调试器,是一个计算机程序用于测试和调试其他程序。调试器的主要用途是在受控条件下运行目标程序,以使程序员能够跟踪其进行中的操作并监视计算机资源(通常是目标程序或计算机操作系统使用的内存区域)的变化,这可能表明代码故障。典型的调试功能包括能够在特定点运行或暂停目标程序、显示内存、CPU寄存器或存储设备(例如磁盘驱动器)的内容以及修改内存或寄存器内容的能力,以便输入可能导致程序执行错误。 要检查的代码也...

调试器

编辑

调试器,是一个计算机程序用于测试和调试其他程序。调试器的主要用途是在受控条件下运行目标程序,以使程序员能够跟踪其进行中的操作并xxx计算机资源(通常是目标程序或计算机操作系统使用的内存区域)的变化,这可能表明代码故障。典型的调试功能包括能够在特定点运行或暂停目标程序、显示内存、CPU寄存器或存储设备(例如磁盘驱动器)的内容以及修改内存或寄存器内容的能力,以便输入可能导致程序执行错误

要检查的代码也可以在指令集仿真器(ISS)上运行,该技术可以在遇到特定条件时使其具有强大的停止能力,但通常比直接在适当的条件下执行代码要慢一些。 一些调试器提供两种操作模式,即完全或部分仿真,以限制这种影响。

调试器

当程序由于编程错误或无效数据而无法正常继续运行时,将出现“陷阱” 。例如,程序可能试图使用当前版本的CPU上不可用的指令,或者试图访问不可用或受保护的内存。当程序“捕获”或达到预设条件时,如果它是源级调试器或符号调试器,则调试器通常会在原始代码中显示该位置,这在集成开发环境中通常很常见。如果它是低级调试器或机器语言调试器,则会在 反汇编(除非它也可以在线访问原始源代码,并且可以显示来自汇编或编译的代码的适当部分)。

调试器的功能

编辑

通常,调试器在其顶层提供查询处理器,符号解析器,表达式解释器和调试支持接口。调试器还提供更复杂的功能,例如在某个事件或指定的指令下通过逐步运行程序(单步执行或程序动画)、停止(中断)(暂停程序检查当前状态)、断点并跟踪变量的值。一些调试器能够在程序运行时修改程序状态。也有可能在程序的其他位置继续执行以绕过崩溃或逻辑错误。

使调试器对纠正错误有用的相同功能使其可以用作软件破解工具来规避复制保护,数字版权管理和其他软件保护功能。通常,它还可用作通用验证工具,故障覆盖率和性能分析器,尤其是在显示了指令路径长度的情况下。[3]早期基于磁盘的微型计算机通常受益于以下功能:诊断和恢复损坏的目录或注册表数据记录,“取消删除”标记为已删除的文件或破解文件密码保护。

大多数主流的调试引擎(例如gdb和dbx)都提供基于控制台的命令行界面。调试器前端是调试器引擎的流行扩展,它们提供IDE集成、程序动画和可视化功能。

记录并重放调试

记录并重放调试,也称为“软件飞行记录”或“程序执行记录”,捕获应用程序状态更改并将其存储为磁盘,以执行程序中的每个指令。然后可以反复回放记录,并进行交互式调试以诊断和解决缺陷。记录和重放调试对于远程调试以及解决间歇性,不确定性和其他难以再现的缺陷非常有用。

反向调试

一些调试器包括称为“反向调试”的功能,也称为“历史调试”或“向后调试”。这些调试器可以使程序的执行及时倒退。各种调试器都包含此功能。Microsoft Visual Studio(2010 Ultimate版、2012 Ultimate、2013 Ultimate和2015 Enterprise版)提供了针对C#、Visual Basic .NET和某些其他语言(而非C ++)的IntelliTrace反向调试。反向调试器也适用于C、C ++、Java、Python、Perl和其他语言。有些是开源的。有些是专有的商业软件。一些反向调试器将目标速度降低了几个数量级,但是xxx的反向调试器将速度降低了2倍或更小。反向调试对于某些类型的问题非常有用,但仍不常用。

语言依赖

编辑

一些调试器使用一种特定的语言运行,而其他调试器可以透明地处理多种语言。例如,如果主目标程序是用COBOL编写的,但是调用了汇编语言子例程和PL / 1子例程,则调试器可能必须动态切换模式以适应发生的语言变化。

内存保护

编辑

一些调试器还集成了内存保护功能,以避免诸如缓冲区溢出之类的存储违规行为。这在事务处理环境中非常重要,在事务处理环境中,根据任务逐个从内存“池”动态分配内存。

调试的硬件支持

编辑

大多数现代微处理器在其CPU设计中至少具有以下功能之一,以使调试更加容易:

  • 单步执行程序的硬件支持,例如trap flag。
  • 满足Popek和Goldberg虚拟化要求的指令集使编写调试器软件变得更加容易,该调试器软件与被调试软件在同一CPU上运行;这样的CPU可以全速执行被测程序的内部循环,并且仍然处于调试器的控制之下。
  • 系统内编程允许外部硬件调试器对被测系统进行重新编程(例如,添加或删除指令断点)。具有此类ISP支持的许多系统还具有其他硬件调试支持。
  • 对代码和数据断点的硬件支持,例如地址比较器和数据值比较器,或者包括大量工作在内的页面错误硬件。
  • JTAG访问硬件调试接口,例如ARM体系结构处理器上的接口或使用Nexus命令集。嵌入式系统中使用的处理器通常具有广泛的JTAG调试支持。
  • 仅有6个引脚微控制器需要使用低引脚数的JTAG替代品,例如Atmel AVR上的BDM、Spy-Bi-Wire或debugWIRE。例如,DebugWIRE在RESET引脚上使用双向信令。

调试器前端

编辑

一些功能xxx大且最受欢迎的调试器仅实现简单的命令行界面(CLI),通常可xxx程度地提高可移植性并xxx程度地减少资源消耗。开发人员通常认为通过图形用户界面(GUI)进行调试更容易,效率更高。这是视觉前端,使用户能够xxx和控制屈从CLI-仅通过调试器的原因的图形用户界面。一些GUI调试器前端被设计为与各种仅CLI的调试器兼容,而另一些则针对一个特定的调试器。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/117127/

(5)
词条目录
  1. 调试器
  2. 调试器的功能
  3. 记录并重放调试
  4. 反向调试
  5. 语言依赖
  6. 内存保护
  7. 调试的硬件支持
  8. 调试器前端

轻触这里

关闭目录

目录