Debug

来自站长百科
跳转至: 导航、​ 搜索
Debug

Debug定义及其作用[ ]

它是一个DOS实用程序,是供程序员使用的程序调试工具。

  • 可以用它检查内存中任何地方的字节以及修改任何地方的字节。
  • 可以用于逐指令执行某个程序以验证程序运行的正确性。
  • 可以追踪执行过程,比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区等。

Debug命令介绍[ ]

Debug功能[ ]

  • 直接输入,更改,跟踪,运行汇编语言源程序
  • 观察操作系统的内容
  • 查看ROM BIOS的内容
  • 观察更改RAM内部的设置值
  • 以扇区或文件的方式读写软盘数据

相关介绍[ ]

  • Debug把所有数据都作为字节序列处理。因此它可以读任何类型的文件。Debug可以识别两种数据: 十六进制数据和ASCⅡ码字符。它的显示格式是各个字节的十六进制值以及值在32与126之间的字节的相应ASCⅡ码字符。
  • 在Debug中输入数据有两种方法: 提示方法和非提示方法。在用提示方法时,用户可以输入要求输入数据的命令,后跟数据所要输入的地址。然后用户就可以看到该地址中已有内容及一个冒号提示符。此时用户可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到短横(-)提示符。在运用非提示方法时,用户可以输入要输入数据的内存地址以及要输入的字节。但与使用字处理程序或正文编辑程序时不一样,在使用Debug时,用户不能直接移动光标到一入口点输入或修改数据,而要一次输入一个或几个字节。
  • 在使用Debug时可以只涉及内存中的数据,从而一般都要指定所要处理的内存地址,地址的输入格式是: [段地址]: [位移]。如果没有输入地址,Debug将假定为当前内存段,从位于地址100H的字节开始。前100H字节保留给程序段前缀使用,这一专用区域用于建立DOS与程序之间的联系,Debug总是用四位十六进制数表示地址。

Debug常用命令及其功能[ ]

  • A[地址] 汇编命令

功能: 将指令直接汇编成机器码输入到内存中。用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,改语句被汇编到 CS:0100区域。

  • C[源地址范围][目的地址]比较命令

功能: 比较两内存区域中的内容是否相同,若不同则显示其地址和内容。   

  • D[地址] 或D[起始地址][目的地址] 转储命令   

功能: 以内存映象方式显示内存中的信息。转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCII字符显示,所有不可打印字符用句号表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令, 则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。

  • E[地址] [字节串) 修改内存命令   

功能: 从指定的地址开始修改内存值。

  • F[地址范围] [字节或字节串] 填写命令   

功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。

  • G[=起始地址] [[断点]……] 执行命令

功能: 执行正在调试的程序,当达到断点时停止执行, 并且显示寄存器标志和下一条要执行的命令。如果没有指定起始地址,那么当前指令地址由CSIP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。

  • L[地址][盘号:][逻辑扇区号][扇区数]

功能: 将一个文件或盘的绝对扇区装入存储器。单个L命令能够装入的最大扇区数是 80H,其中盘号 0,1,2,3……分别代表 A,B,C,……出现读盘错,显示错误信息。

  • M[地址范围][起始地址] 数据传送命令

功能: 把地址范围内的存储器单元的内容移到起始地址的指定地址中。传送期间,源区和目标区可以部分重叠;传送后源区域数据保持不变。

  • N[盘号: ] [路径] [文件名] [扩展名]

功能: 定义操作文件名。可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存 CS:5C和CS:6C上,供以后的L和W命令操作之用。我们在运行程序侦错时,在启动Debug时在其后加文件程序名以及该程序的参数或运行文件,但当我们侦错一段后,可能装入其它文件来测试,这时我们可利用N命令来设置而无需退出Debug。

  • P[=地址] [数据] 进程命令

功能: 将一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。在执行一条子程序调用指令,循环指令,中断指令或一个重复字符串指令时,发出P命令去执行有关指令,并且返回到要执行的下一条指令。 P命令和T一样选用来跟踪程序运行过程用的命令,我们可以在P命令中指定程序运行的起始地址,指令个数,如未指定则CS:IP所指定程序的地址开始一次运行一条令。

  • S[地址范围] [字符串]

功能: 在指定的地址范围内查找给定的字符串。用来指定在地址范围内查找一个字符串,若找到则显示其地址,否则直接显示Debug提示符。隐含地址为DS段值。

  • T[=地址][指令条数] 跟踪命令

功能: 逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令,每执行一条指令之后,显示所有寄存器的内容和标志状态。

  • W[地址] [盘符:] [起始扇区] [扇区数] 写盘命令   

功能: 将修改过的数据写到磁盘上。可以将指定内存地址开始的数据写在磁盘上,可以在没有指定参数,或指定地址参数的情况下,将调试文件写在磁盘上。

Debug命令的实际应用[ ]

  • 非物理0磁道坏软盘的修复。此种损坏从软盘盘面上来看并没有明显的划伤和霉变,一般可以恢复其数据,也可使软盘重新在利用。
  • 硬盘启动失败处理。在正常机上格式化一张软盘,无其它数据,进入Debug即可。
  • CMOS数据的保存,恢复CMOSRAM '地址口'的口地址为 70h '数据口'的口地址为 71h 读取时只需将读的CMOSRAM的地址送到70h,随后就可以从71h中得到所需数据。  
  • 硬盘主引导扇区数据的保存与恢复。硬盘工作正常时读取主引导扇区信息。
  • 冷启动与热启动。用Debug实现系统冷启动与热启动程序。
  • 用Debug作硬盘低级格式化。硬盘低级格式化一般用dm,但Debug也可以低级格式化硬盘,进入Debug,敲入相关的汇编程序代码即可实现。

相关条目[ ]

参考资料[ ]