wenmo8 发布的文章

“便笺簿”窗口是一个剪贴板,您可以在其中键入和保存文本。

打开便笺簿

  • 通过菜单View--->Scratch Pad
  • 通过快捷键Alt+8
  • 通过工具栏

使用便笺簿

用上面的方式打开的窗口如下:

 

在草稿板窗口中,可以执行以下操作:

  • 若要在草稿板窗口中键入,单击窗口,然后开始键入的你想要添加的文本此外可以使用标准复制和粘贴功能。 草稿板窗口的内容不会影响调试器的操作。 此窗口存在只是为了帮助进行文本编辑。

  • 如果关闭草稿板窗口中,文本会保留,并重新打开该窗口时可用。 此外可以通过使用文件关联来保存暂存器窗口中的文本。

草稿板窗口具有带其他命令的快捷方式菜单。 若要访问菜单,请右键单击标题栏或单击窗口 (在右上角附近的图标显示的草稿板窗口工具栏快捷方式菜单按钮的屏幕截图)。 此菜单包含以下命令:

 

  • 仅限菜单)将与文件相关联打开一个对话框,可以通过它选择一个文本文件。 选择文件后,在草稿板中的当前文本被清除,并且替换为所选文件中的文本。 与此文件关联暂存器时,所有新文本键入到暂存器保存到文件。 可以结束与文件关联,或者通过选择结束文件关联快捷方式菜单选项或通过关闭并重新打开便笺。

  • (仅限菜单)结束文件关联结束与指定的文本文件的暂存器关联。 便笺中的所有文本,在选择此选项之前先都保存在文件中。 在中键入的所有文本便笺关联结束后不再保存在文本文件中。

  • 停靠取消停靠将使窗口进入或离开停靠的状态。

  • (仅限菜单)移到新停靠关闭便笺并将其打开新的平台中。

  • (仅限菜单)设置为选项卡形式停靠为窗口中,键入目标的暂存器不可用。 

  • 始终浮点将使窗口停靠,即使仍拖到停靠位置。

  • 移动与帧将使窗口移动时移动的 WinDbg 帧,即使在窗口已解除固定。 

  • 帮助有关 Windows 调试工具文档中打开此主题。

  • 关闭关闭此窗口。

命令浏览器窗口显示并存储调试器命令的文本结果。此窗口创建命令引用,使您可以查看特定命令的结果,而无需重新输入该命令。命令浏览器窗口还提供了对存储的命令的导航,因此您可以比使用调试器命令窗口更快地访问命令。

命令浏览器的打开

  • 通过菜单Veiw--->Command Browser
  • 通过快捷键Ctrl+N
  • 通过工具栏

使用命令浏览器

用上面的方式打开的窗口如下:

 

 

在命令浏览器窗口中,可以执行以下操作:

  • 若要输入命令时,其在命令键入。

  • 若要查看以前输入的命令的结果,请使用Start, Prev,Next按钮来滚动查看命令列表,从“命令”菜单中选择前20个命令之一。要查找不是前20个命令之一的命令,请使用“Next”按钮。

命令浏览器窗口具有带其他命令的快捷菜单。 若要访问菜单,请右键单击标题栏或单击窗口 (在右上角附近的图标该按钮将显示命令浏览器窗口中工具栏快捷方式菜单的屏幕截图)。 以下列表介绍了一些菜单命令:

 

 

  • Start, Prev, 和 Next将光标分别移到命令历史记录的开头或上一个或下一个命令。

  • Add to Recent Commands将当前命令放入WinDbg窗口中“视图”菜单的“最近使用的命令”菜单中。最近使用的命令保存在工作区中。

  • Toolbar工具栏,开启和关闭。

  • 移到新停靠关闭命令浏览器窗口并将其打开新的平台中。

  • 始终浮点将使窗口停靠,即使仍拖到停靠位置。

  • 移动与帧将使窗口移动时移动的 WinDbg 帧,即使在窗口已解除固定。 

其他说明

在命令浏览器窗口中输入的命令由调试器引擎执行,而不是由WinDbg用户界面执行。这意味着您不能在命令浏览器窗口中输入像.cls这样的用户界面命令。如果用户界面是远程客户端,则服务器(而不是客户端)执行该命令。在命令浏览器窗口中输入的命令将同步执行,因此在完成输出之前不会显示输出。命令浏览器窗口保存在WinDbg工作区中,但不保存命令历史记录。工作空间中仅保存每个命令浏览器窗口的当前命令。

窗口切换

可以使用以下键盘快捷方式窗口之间进行切换。

效果

CTRL+TAB

调试信息窗口之间切换。 通过重复使用此密钥,你可以扫描通过的所有窗口,而不考虑是否浮动、 停靠本身,或选项卡式停靠窗口的集合的一部分。

Alt+Tab

目前,在您的桌面上的窗口之间切换。 此外可以使用此键盘快捷方式的 WinDbg 帧和已创建任何其他停靠之间进行切换。

菜单命令

您可以使用以下键盘快捷方式而不是鼠标来选择菜单命令。 

等效的菜单

F1

帮助 |内容

F3

编辑 |查找下一个

SHIFT+F3

与相同编辑 |查找下一个,但按反向执行搜索。

Alt + F4

文件 |退出

CTRL+F4

文件 |关闭当前窗口

F5

调试 |转到

SHIFT+F5

调试 |停止调试

CTRL+SHIFT+F5

调试 |重新启动

F6

文件 |附加到进程

F7

调试 |运行到光标处

F8

调试 |单步执行

F9

如果活动窗口的源或反汇编窗口:在当前行中插入断点。 (如果已没有当前行上设置断点,此按钮将移除该断点。)

否则:此时将打开断点像那样的对话框编辑 |断点

ALT+F9

编辑 |断点

F10

调试 |逐过程执行

Ctrl+F10

调试 |运行到光标处

F11

调试 |单步执行

SHIFT+F11

调试 |跳出

ALT+1

此时将打开调试器命令窗口(与相同视图 |命令)。

ALT+SHIFT+1

关闭命令窗口。

ALT+2

此时将打开监视窗口 (与相同视图 |观看)。

ALT+SHIFT+2

关闭监视窗口

ALT+3

此时将打开局部变量窗口(与相同视图 |局部变量)

ALT+SHIFT+3

关闭局部变量窗口。

ALT+4

此时将打开寄存器窗口(与相同视图 |注册)。

ALT+SHIFT+4

关闭寄存器窗口。

ALT+5

打开一个新内存窗口(与相同视图 |内存)。

ALT+SHIFT+5

关闭内存窗口。

ALT+6

此时将打开调用窗口(与相同视图 |调用堆栈)。

ALT+SHIFT+6

关闭调用窗口

ALT+7

此时将打开反汇编窗口(与相同视图 |反汇编)。

ALT+SHIFT+7

关闭反汇编窗口。

ALT+8

打开草稿板 (与相同视图 |Scratch Pad)。

ALT+SHIFT+8

关闭草稿板。

ALT+9

此时将打开进程和线程窗口(与相同视图 |进程和线程)。

ALT+SHIFT+9

关闭进程和线程窗口中。

CTRL + A

编辑 |选择所有

CTRL + C

编辑 |复制

CTRL + D

文件 |打开故障转储

CTRL+E

文件 |打开可执行文件

Ctrl+F

编辑 |查找

CTRL + G

编辑 |转到地址

CTRL+I

文件 |图像文件路径

CTRL+SHIFT+I

编辑 |设置当前指令

CTRL + K

文件 |内核调试

Ctrl+L

编辑 |转到行

Ctrl+O

文件 |开放源代码文件

Ctrl+P

文件 |源文件路径

CTRL+R

文件 |连接到远程会话

Ctrl+S

文件 |符号文件路径

CTRL + V

编辑 |粘贴

CTRL+SHIFT+V

编辑 |评估所选内容

Ctrl+W

文件 |打开工作区

CTRL+X

编辑 |剪切

CTRL + SHIFT + Y

编辑 |显示所选的类型

ALT +\* (数字键盘)

编辑 |转到当前指令

SHIFT + DELETE

编辑 |剪切

SHIFT + INSERT

编辑 |粘贴

CTRL + INSERT

编辑 |复制

CTRL + BREAK

调试 |中断

ALT+DEL

调试 |中断

控制键

以下键盘快捷方式是等效于 KD / CDB 控制键。

等效的菜单KD / CDB 控制密钥

CTRL+ALT+A

调试 |内核连接 |周期的波特率

CTRL + A

CTRL + ALT + D

 

CTRL + D (切换调试信息)

CTRL+ALT+K

调试 |内核连接 |周期初始中断

CTRL + K

CTRL + ALT + R

调试 |内核连接 |重新同步

CTRL+R

CTRL+ALT+V

视图 |详细输出

CTRL + V

CTRL + ALT + W

视图 |显示版本

Ctrl+W

插入符控制

您可以使用以下键盘快捷方式移动插入符号 (^) 中的大多数调试的信息窗口。

插入符号移动

向左一个字符

左侧

右一个字符

右侧

左移字

CTRL+LEFT

正确的单词

CTRL + 向右键

向上移动一行

UP

向下移动一行

向下

向上翻页

Page Up

向下翻页

Page Down

当前行的开头

Home

在行尾

End

该文件的开头

CTRL + HOME

文件的末尾

CTRL + END

请注意  中调试器命令窗口、 向上和向下键浏览通过命令历史记录。 可以使用 INSERT 键以将插入模式下打开和关闭。

文本选择

使用以下键盘快捷方式选择文本。

选择

左侧的字符

SHIFT+LEFT

右侧的字符

SHIFT + 向右键

左侧的单词

SHIFT+CTRL+LEFT

右侧文字

SHIFT + CTRL + 向右键

当前行

SHIFT + 向下插入符号是否在第 1 列

上述行

SHIFT + 向上如果插入点在第 1 列

至行尾

SHIFT + END

到行首

SHIFT + HOME

启动屏幕

SHIFT + PAGE UP

屏幕上向下

SHIFT + Page Down

到文件的开头

SHIFT + CTRL + HOME

到文件的末尾

SHIFT+CTRL+END

文本删除

使用以下键盘快捷方式删除文本。

DELETE

插入符号右边的字符

DELETE

插入符号左边的字符

退格符

所选的文本

DELETE

在 WinDbg 中,源窗口显示已加载到调试器中的源文件。

如何打开源代码窗口

  • 通过菜单File--->Open Source File打开源代码文件,窗口随之打开
  • 通过快捷键Ctrl+O
  • 通过工具栏
  • 设置源路径,调试器实时自动打开

使用源代码窗口

通过上面方式打开的窗口如下:

 

每个源窗口都显示一个源文件的文本。 不能在调试器中编辑源文件。每个源窗口都具有包含附加命令的快捷菜单。 若要访问菜单,请右键单击标题栏,或单击窗口右上角附近显示的图标(显示源窗口工具栏快捷菜单的按钮屏幕截图)。 以下列表描述了一些菜单命令:

 

  • Set instruction pointer to current line 会将指令指针的值更改为对应于当前行的指令。 此命令等效于使用 "编辑 |设置当前指令命令或按 CTRL + SHIFT + I.

  • Edit this file 在文本编辑器中打开源文件。编辑器由WinDiff编辑器注册表信息或WINDBG_INVOKE_editor环境变量的值确定。例如,当WINDBG_INVOKE_EDITOR的值为以下值时。

     
    c:\my\path\myeditor.exe -file %f -line %l

软件调试的概念

软件调试是泛指重现软件缺陷问题,定位和 查找问题根源,最终解决问题的过程。 软件调试通常有如下两种不同的定义:

  • 定义1:软件调试是为了发现并排除软件程序中 的错误,可以通过某种方法控制被调试程序的执行过 程,以便随时查看和修改被调试程序执行状态的方法。 在该定义中,软件测试属于软件调试的一部分,与 牛津词典中的调试定义类似。 在牛津词典中调试定义 为:“识别和排除计算机硬件或软件中错误的过程。”
  • 定义2:调试是执行一次成功的测试之后所要进 行的工作。 所谓成功的测试,是指它可以证明程序没 有实现预期的功能。 调试包含两个步骤,从执行了一个成功测试用例,发现问题后开始;第一步,确定程序 中可疑错误的准确性质和位置;第二步,修改错误。 在该定义中软件测试从调试工作中分离出来。

软件调试的内涵

软件调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机中测试。根据测试时所发现的错误,进一步诊断,找出原因和具体的位置进行修正。

调试这个术语可能意味着很多不同的事情,但最字面的意思是,它意味着从代码中删除错误、异常和bug。现在,有很多方法可以做到这一点。例如,可以通过扫描代码以查找输入错误或使用代码分析器进行调试。您可以使用性能分析器调试代码。或者,可以使用调试器进行调试。

软件调试的基本过程

按照定义1,软件系统调试的基本过程如下:

  1. 用编辑程序把编制的源程序按照一定的书写格式送到计算机中,编辑程序会根据使用人员的意图对源程序进行增、删或修改。
  2. 把送入的源程序翻译成机器语言,即用编译程序对源程序进行语法检查并将符合语法规则的源程序语句翻译成计算机能识别的“语言”。如果经编译程序检查,发现有语法错误,那就必须用编辑程序来修改源程序中的语法错误,然后再编译,直至没有语法错误为止。
  3. 使用计算机中的连接程序,把翻译好的计算机语言程序连接起来,并扶植成一个计算机能真正运行的程序。在连接过程中,一般不会出现连接错误,如果出现了连接错误,说明源程序中存在子程序的调用混乱或参数传递错误等问题。这时又要用编辑程序对源程序进行修改,再进行编译和连接,如此反复进行,直至没有连接错误为止。
  4. 将修改后的程序进行试算,这时可以假设几个模拟数据去试运行,并把输出结果与手工处理的正确结果相比较。如有差异,就表明计算机的程序存在有逻辑错误。如果程序不大,可以用人工方法去模拟计算机对源程序的这几个数据进行修改处理;如果程序比较大,人工模拟显然行不通,这时只能将计算机设置成单步执行的方式,一步步跟踪程序的运行。一旦找到问题所在,仍然要用编辑程序来修改源程序,接着仍要编译、连接和执行,直至无逻辑错误为止。也可以在完成后再进行编译。

按照定义2,软件系统调试的基本过程如下:

  1. 重现问题:重现软件测试发现的问题;
  2. 问题定位:确定可能发生问题的程序段位置;
  3. 查找原因:分析相关代码,确定导致缺陷问题 的内在原因;
  4. 设计方案:提出软件缺陷问题解决方案;
  5. 修改代码:根据设计方案修改程序代码;
  6. 验证和确认:采用审查、分析和测试等技术来 确定错误是否被排除,是否引入了新的错误。

上述6个步骤不断迭代进行,直至问题解决。 软件调试基本过程如图1所示:

 

在这些步骤中,问题定位和查找原因是软件调试 的关键环节,其工作量约占总工作量的90%以上。 软 件调试是一项既耗时又费力,同时又富有技巧性的工 作。 目前软件调试中的问题定位研究的比较多。

 

 

可以看到,定义一的流程更贴合我们的日常开发测试工作;而定义二的流程更贴合我们测试特别是软件发布或上线后发现问题的处理相关工作。

软件调试基本特征

  • 广泛的关联性
    需要调试人员有着雄厚的计算机基础知识(包括操作系统、开发语言、工具等)以及精通面向的业务问题域知识。
  • 难度大
    从"广泛的关联性"就可以知道难度大不大了。当然也看面临的具体问题和调试人员的素质
  • 难以预估完成时间
    这个时间真的是没法预估,除非某个问题的领域专家和对软件整体架构及代码的理解熟悉程度。

软件调试分类

  • 按调试目标的系统环境分类:Windows下的软件调试、Linux下的软件调试、Dos下的软件调试等
  • 按目标代码的执行方式分:
    脚本程序 – 脚本调试器
    执行编译的程序:
            先编译为中间代码,在运行时再动态编译为当前CPU能够执行的目标代码(比如C#开发的.NET程序) – 托管调试
            直接编译和链接成目标代码的程序(C/C++) – 本地调试
            兼具以上两种的 – 混合调试
  • 按目标代码的执行模式分:用户态调试(User Mode Debugging)、内核态调试(Kernel Mode Debugging);
    在Windows这样的多任务操作系统中,作为保证安全和秩序的一个根本措施,系统定义了两种执行模式,即低特权等级的用户模式(User Mode)和高特权等级的内核模式(Kernel Mode)。
    应用程序代码是运行在用户模式下的,操作系统的内核、执行体和大多数设备驱动程序是运行在内核模式的。
  • 按软件所处的阶段分:开发期调试、产品期调试(分界线是产品的正式发布)
  • 按调试器和调试目标的相对位置分:本机提哦啊哈斯、远程调试
  • 按调试目标的活动性分:活动目标调试、转储文件调试