分类 调试 下的文章

二、工具栏

除了断点按钮在工具栏上的每个按钮相当于菜单命令。 每个按钮的效果的完整说明,请参阅相应的菜单命令的页。

在工具栏上的按钮具有以下效果。

按钮描述
Screen shot of the Open Source File button

打开源文件为只读的文件。 等效于文件 |打开源文件。

Screen shot of the Cut button

从活动窗口中删除所选的文本并将其放到剪贴板上。 等效于编辑 |剪切。

Screen shot of the Copy button

将所选的文本从活动窗口复制到剪贴板。 等效于编辑 |复制。

Screen shot of the Paste button

将文本粘贴到光标所在的位置在剪贴板上。 等效于编辑 |粘贴。

Screen shot of the Go button

启动或恢复执行。 执行将继续到达到断点、 异常或事件发生时,该过程结束或调试器将中断目标。 等效于调试 |转。

Screen shot of the Restart button

重新启动进程的开始处的执行。 等效于调试 |重新启动。

Screen shot of the Stop Debugging button

停止执行并永久终止目标进程。 等效于调试 |停止调试。

Screen shot of the Break button

在用户模式下,此按钮停止进程和线程。 在内核模式下,此按钮将分成在目标计算机。 控制权返回给调试器。 此按钮也是用于长时间切断调试器命令窗口显示。 等效于调试 |中断。

Screen shot of the Step Into button

执行一条指令。 如果指令为函数调用,调试器将单步执行函数。 等效于调试 |单步执行。

Screen shot of the Step Over button

执行一条指令。 如果指令是函数调用,调试器将在一个步骤中执行整个函数。 等效于调试 |逐过程执行。

Screen shot of the Step Out button

执行当前函数的其余部分,并完成函数返回时中断。 等效于调试 |跳出。

Screen shot of the Run to Cursor button

从当前到标记为活动反汇编窗口或源窗口中的指令指令执行的所有说明。 等效于调试 |运行到光标处。

Screen shot of the Breakpoints button

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

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

Screen shot of the Command button

打开或激活调试器命令窗口。 等效于视图 |命令。

Screen shot of the Watch button

打开或激活监视窗口。 等效于视图 |观看。

Screen shot of the Locals button

打开或激活局部变量窗口。 等效于视图 |局部变量。

Screen shot of the Registers button

打开或激活寄存器窗口。 等效于视图 |注册。

Screen shot of the Memory button

打开一个新的内存窗口。 等效于视图 |内存。

Screen shot of the Call Stack button

打开或激活调用窗口。 等效于视图 |调用堆栈。

Screen shot of the Disassembly button

打开或激活反汇编窗口。 等效于视图 |反汇编。

Screen shot of the Scratch Pad button

打开或激活暂存器。 等效于视图 |草稿板。

Screen shot of the Source Mode button

源模式和调试程序集模式之间切换。 等效于选中或清除调试 |源模式。

Screen shot of the Font button

可以更改在调试的信息窗口中使用的字体。 等效于视图 |字体。

Screen shot of the Options button

显示选项对话框。 等效于视图 |选项。

三、快捷键

可以使用以下键盘快捷方式窗口之间进行切换。 有关如何在窗口之间移动的详细信息,请参阅定位 Windows。

效果

CTRL+TAB

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

Alt+Tab

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

简介

本文介绍了在Windows中运行的VisualC++程序中处理异常和错误的标准技术。
异常(或严重错误或崩溃)通常意味着程序停止正常工作,需要停止执行。例如,由于程序访问无效的内存地址(如空指针)、无法分配内存缓冲区(内存不足)、C运行时库(CRT)检测到错误并请求程序终止等,可能会发生异常。
C++程序可以处理几种例外:SEH异常,通过操作系统的结构化异常处理机制产生,由C运行库产生的CRT错误,最后是信号。每种错误类型都需要安装异常处理程序函数,该函数将截获异常并执行一些错误恢复操作。
如果应用程序有多个执行线程,事情可能会更复杂。有些异常处理程序可用于整个进程,但有些仅用于当前线程。所以必须在每个线程中安装异常处理程序。
应用程序中的每个模块(EXE或DLL)都链接到CRT库(静态或动态)。异常处理技术在很大程度上依赖于CRT链接类型。
错误类型的多样性、在多线程程序中处理异常的差异,以及异常处理对CRT链接的依赖性,需要大量的工作来处理应用程序允许处理的所有异常。本文旨在帮助您更好地理解异常处理机制,并在C++应用程序中有效地使用异常处理。
本文附带了一个小型控制台演示应用程序ExceptionHandler。演示程序可以引发和捕获不同类型的异常,并生成一个崩溃小型转储文件,允许查看发生异常的代码行。

背景

不久前,我需要一种方法来拦截我的一个开源项目CrashRpt的异常,CrashRpt是一个用于Windows应用程序的崩溃报告库。CrashRpt库处理应用程序中发生的异常,收集有关错误的技术信息(如崩溃小型转储、错误日志、桌面截图),并提供用户通过Internet发送错误报告(图1)。

图1-CrashRpt库的错误报告窗口和错误报告详细信息对话框

也许您已经看到Windows错误报告窗口(图2)突然出现在您的桌面上,CrashRpt库也做了同样的事情,只是它将错误报告发送到您自己的web服务器,而不是Microsoft的服务器。

浏览MSDN时,我得到了SetUnhandledExceptionFilter()函数,该函数用于处理访问冲突。但很快我发现我的应用程序中的一些异常不知怎么地没有被处理,而Watson博士的窗口仍然出现,而不是崩溃的窗口。我又浏览了MSDN,发现许多其他CRT提供的函数可以用来处理CRT错误。下面是此类函数的一些示例:set_terminate(),_set_invalid_parameter_handler(),_set_purecall_handler()。然后我发现有些CRT处理程序只对当前线程有效,但有些处理程序对进程的所有线程都有效。继续我的研究,我发现开发人员必须理解许多细微差别才能有效地使用异常处理。我的研究结果如下。

关于例外的几句话

如您所知,异常或严重错误通常意味着程序停止正常工作,需要停止其执行。例如,可能由于以下原因发生异常:

  • 程序访问无效的内存地址(例如空指针)
  • 无限递归导致堆栈溢出
  • 大数据块被写入一个小缓冲区
  • C++类的纯虚方法称为C++类。
  • 无法分配内存缓冲区(内存不足)
  • 无效参数传递给C++系统函数
  • C运行时库检测错误并请求程序终止

有两种例外,它们有不同的性质:SEH异常(结构化异常处理、SEH)和类型化C++异常。操作系统提供结构化异常处理机制(这意味着所有Windows应用程序都可以引发和处理SEH异常)。SEH例外最初是为C语言设计的,但它们也可以用在C++中。SEH异常是使用_try{}_except(){}构造处理的。程序的main()函数由这样的构造保护,因此默认情况下,所有未处理的SEH异常都会被捕获并调用Dr.Watson。SEH异常是VisualC++编译器特有的。如果编写可移植代码,则应使用#ifdef/#endif保护结构化异常处理构造。

下面是一个代码示例:

int* p = NULL;   //pointer to NULL
__try
{
//Guarded code *p = 13; //causes an access violation exception }
__except(EXCEPTION_EXECUTE_HANDLER)
//Here is exception filter expression {//Here is exception handler//Terminate program ExitProcess(1);
}

1.4、调试菜单

调试相关操作的功能菜单在这个下面,比如单步执行等。

  • Go

    单击Go调试菜单恢复 (或开始) 在目标上的执行。 此执行将继续,直到抵达某个断点、 异常或事件发生时,该过程结束或调试器将中断目标。此命令相当于按 F5 或单击 (F5) 转按钮 (转按钮的屏幕截图) 工具栏上。

  • 转到未经处理异常
    单击转未经处理的异常上调试恢复目标上的执行,并将当前异常视为未经处理的菜单。
  • 转到已处理异常
    单击转处理异常上调试恢复目标上的执行,以处理当前异常,为已处理的菜单。
  • 重启
    单击重新启动上调试菜单可停止目标的执行和最终目标进程和所有线程。 然后,此命令重新启动该过程开始时目标执行。此命令相当于按 CTRL + SHIFT + F5 或单击重新启动 (Ctrl + Shift + F5) 按钮 (重新启动按钮的屏幕截图) 工具栏上。
  • 停止调试

    在调试菜单上单击停止调试可停止目标的执行和最终目标进程和所有线程。 此操作,可以启动不同的目标应用程序进行调试。此命令相当于按 SHIFT + F5 或单击停止调试 (Shift + F5) 按钮 (停止调试按钮的屏幕截图) 工具栏上。

  • 分离调试对象

    单击分离调试对象菜单断开与目标应用程序并使其继续运行。

    在下列情况之一,支持从目标中分离:


    • 调试正在运行的用户模式目标。

    • Noninvasively 调试用户模式下的目标。







    如果你正在调试在 Windows 2000 上的实时目标分离调试对象命令将不可用,因为此版本的 Windows 不支持从目标进程中分离。
  • 中断

    单击中断调试菜单以终止的目标执行并返回到调试器。在用户模式下,此命令停止进程和线程,您可以重新获取调试器的控制。 在内核模式下,此命令将分成在目标计算机。在调试器处于活动状态时,还可以使用此命令。 在此情况下,该命令将长时间截断调试器命令窗口显示。中断命令等效于按 CTRL + BREAK 或单击中断 (Ctrl + Break) 按钮 (中断按钮的屏幕截图) 工具栏上。


    ALT+DEL


    可以使用ALT + DEL发送中断ALT + DEL的工作方式相同中断 (Ctrl + Break)。


    用户模式下的效果


    在用户模式下中断命令导致目标应用程序进入调试器。 目标应用程序会停止,调试器将变为活动状态,并且可以输入的调试器命令。

    如果调试器已处于活动状态,中断不会影响目标应用程序。 但是,此命令可用于终止调试器命令。 例如,如果已请求很长并且不想看到的再中断将结束显示并使你返回到调试器命令提示符下。

    当您在执行使用 WinDbg 进行远程调试时,你可以主计算机的键盘上按 Break 键。 如果你想要发出从目标计算机的键盘中断,请在基于 x86 的计算机上使用 CTRL + C。

    可以按 F12 键以打开命令提示符下,当正在调试的应用程序繁忙时。 单击其中一个目标应用程序的 windows,在目标计算机上按 F12。


    内核模式的效果


    在内核模式下中断命令将导致目标计算机进入调试器。 此命令将锁定目标计算机并唤醒调试器。

    调试仍在运行的系统时,您必须按 Break 键主机键盘上打开初始的命令提示符。

    如果调试器已处于活动状态,中断不会影响目标计算机。 但是,此命令可用于终止调试器命令。 例如,如果已请求很长并且不想看到的再中断将结束显示并使你返回到调试器命令提示符下。

    此外可以使用中断若要打开命令提示符下,调试器命令生成很长或当目标计算机是繁忙时。 调试基于 x86 的计算机时,您还可以具有相同的效果目标键盘上按 CTRL + C。

    SYSRQ 密钥 (或增强型键盘上的按 ALT + SYSRQ) 是类似。 从任何处理器上的主机或目标键盘此密钥适用。 但是,此密钥仅适用于您通过按 CTRL + C 之前至少一次打开提示符。







    可以通过编辑注册表禁用 SYSRQ 密钥。 在 HKEY_本地_机\系统\CurrentControlSet\Services\i8042prt\参数注册表项,请创建一个名为值BreakOnSysRq并将其设置为等于 DWORD 0x0。 然后重启计算机。 在重新启动计算机后,可以将目标计算机的键盘上按 SYSRQ 密钥并不会中断内核调试程序。
  • 单步进入

    单击单步执行菜单以在目标上执行一条指令。 如果指令为函数调用,调试器将单步执行函数。此命令是等效于按 F11 或 F8 键或单击单步执行 (F11 或 F8) 按钮 (单步执行按钮的屏幕截图) 工具栏上。

  • 单步跳过

    单击单步跳过菜单以在目标上执行一条指令。 如果指令是函数调用,则执行整个函数。此命令相当于按 F10 或单击逐过程执行 (F10) 按钮 (的屏幕截图步骤按钮上方) 工具栏上。

  • 单步跳出

    单击单步跳出菜单以继续在目标系统上运行。 此命令执行当前函数的其余部分,并在完成返回的函数时中断。此命令相当于按 SHIFT + F11 或单击跳出 (Shift + F11) 按钮 (单步跳出按钮的屏幕截图) 工具栏上

  • 运行到光标处

    单击运行到光标处调试菜单以继续在目标系统上运行。 如果不插入中的指令上光标反汇编窗口或源窗口,然后执行此操作,WinDbg 从当前由指令指令执行的所有说明你已选择。此命令是等效于按 f7 键或 CTRL + F10 键或单击运行到光标处 (Ctrl + F10 或 F7) 按钮 (运行到光标按钮的屏幕截图) 工具栏上。

  • 源模式

    选择源模式菜单切换到源模式的调试器。 清除源模式以切换到程序集模式的调试器。可以单击上的源模式按钮 (在下图中左侧所示) 来更改调试器到源模式,或单击源模式关闭到按钮 (在下图右侧所示)将调试程序更改为程序集模式。源模式按钮的屏幕截图当源模式处于活动状态时,ASM 在状态栏上不可用。 在程序集模式处于活动状态,ASM 状态栏上显示。

  • 解决不符合要求的符号

    选择解析非限定符号上调试菜单用于解析不具有任何模块的前缀的符号。如果清除解析非限定符号,调试器无法解析不具有任何模块的前缀的符号。 如果不选择解析非限定符号和具有没有前缀的变量时未加载,调试器不会加载任何其他符号,若要解决此问题。 如果该选项是很清晰,但前提是它们已进行先前加载,仍可以使用非限定的符号。不过,我们始终建议你使用模块限定符,则可以清除解析非限定符号选项,以避免加载时不使用模块限定符解析不正确或者存在拼写错误的符号的符号。

  • 事件筛选器

    单击事件筛选器菜单打开事件筛选器对话框。

    在此对话框中,可以配置的中断状态和异常和事件的处理状态。事件筛选器对话框框中列出的调试器识别的所有事件。 您可以向将显示的列表添加带编号的异常。若要更改的事件的中断状态,请选择事件,然后单击之一执行选项按钮 (已启用,禁用,输出,或忽略)。若要更改的事件的处理状态,请选择该事件,然后单击之一继续选项按钮 (Handled或未处理)。若要添加新的带编号的异常,请单击添加。 当异常筛选器出现对话框,请输入异常代码,单击相应的按钮的中断状态和处理状态,然后单击确定。若要删除带编号的异常,请选择该异常,然后单击删除。 无法删除标准事件。如果设置的状态负载模块或卸载模块事件,可以限制此状态设置为特定模块。 单击自变量,输入模块的名称或中的模块的基址筛选器参数对话框中,然后单击确定。 可以使用通配符时指定的基址。 如果未指定模块,在加载或卸载的任何模块时,会发生中断。如果设置的状态调试对象输出事件,可以限制此状态设置为特定输出模式。 单击自变量,输入中的输出模式筛选器参数对话框中,然后单击确定。 如果未指定输出模式,在中断发生的任何输出。
    如果你想要设置自动事件进入调试器时就会执行的命令,选择事件,然后单击命令。 筛选器命令对话框将出现。 输入想要登录到任何命令命令或第二次命令框。 使用分号分隔多个命令,不要将这些命令括在引号中。

  • 模块

    单击模块菜单可显示的当前列表加载的模块。当您单击模块,则模块列表对话框随即出现。

    此对话框列出了当前加载到内存中的所有模块。

    模块列表分为以下各列:


    • 名称列指定的模块名称。

    • 启动最终列指定模块的内存中的映像的第一个和最后一个地址。

    • 时间戳列指定的生成日期和时间的模块。

    • 校验和列指定的校验和值。

    • 符号列将显示此模块使用的符号信息。 此列中显示的值的详细信息,请参阅符号状态缩写。

    • 符号文件列指定关联的符号文件的路径和文件。 如果调试器不知道的任何符号文件,而是提供可执行文件的名称。


    如果单击某一列的标题栏,显示将按该列中数据进行排序。 如果单击标题栏中再次,反转排序顺序。如果您选择某一行,然后单击重新加载,将重新加载模块的符号信息。如果选择一个行,按 CTRL + C,整行复制到剪贴板。单击关闭以关闭此对话框。

  • 内核连接---循环波特率

    指向内核连接,然后单击周期波特率菜单来更改在内核调试连接中使用的波特率。此命令相当于按 CTRL + ALT + A。 (您可以还按 CTRL + A 中 KD。)此命令进行循环的内核调试连接的所有可用波特率。 受支持的波特率有 19200、 38400、 57600 和 115200。 使用此命令中,每次选择下一步的波特率。 如果已经是 115200 波特率,则将其减少到 19200。此命令不能用于更改在其中进行调试的波特率。 在主计算机和目标计算机的波特率必须匹配,并且不能无需重新启动计算机更改的目标计算机的波特率。 因此,两台计算机尝试以不同速率进行通信时,才必须更改的波特率。 在这种情况下,必须更改主计算机的波特率以匹配的目标计算机。

  • 内核连接---循环初始中断

    指向内核连接,然后单击周期初始中断菜单来更改在其,调试器将自动中断到目标的条件计算机。此命令相当于按下 CTRL + ALT + K。 (您可以同时按 CTRL + K KD 中。)此命令会使内核调试程序,以下三种状态之间循环:

    无分隔符
    到目标计算机不会中断调试器,除非你按CTRL + BREAK或调试 |中断。

    在重新启动时中断
    内核初始化后,调试器将中断重启的目标计算机。 此命令相当于使用-b 启动 WinDbg 命令行选项。

    第一个模块加载时中断
    第一个内核模块加载之后,调试器将中断重启的目标计算机。 (此操作会导致要比前面上重新启动中断状态。)此命令相当于使用-d 启动 WinDbg 命令行选项。





    当你使用周期初始中断命令时,显示新的中断状态。
  • 内核连接---重新同步

    指向内核连接,然后单击重新同步菜单会导致调试器尝试重新建立内核调试与目标的连接计算机。此命令相当于按下 CTRL + ALT + R。 (您还可以按 CTRL + R 中 KD。)如果目标没有响应,请使用此命令。

1.5、窗口菜单

 主要是对Windbg窗口布局的一些功能。

  • 关闭所有源窗口
    单击关闭所有源 窗口菜单关闭所有窗口
  • 关闭所有错误窗口
    单击关闭所有错误 窗口菜单关闭已经从找不到源文件中打开的所有错误消息框。
  • 打开停靠窗口
    单击打开停靠窗口菜单以创建新的停靠。 一个停靠是可以将调试信息 windows 到独立窗口。
  • 全部停靠

    单击所有停靠浮动窗口中,除之外使用的所有始终浮点它们的快捷菜单上选择。WinDbg 自动定位每个浮动窗口。 如果永远不会具有之前已停靠窗口,WinDbg 将其移到新的 untabbed 位置。 如果已在之前停靠窗口,WinDbg 将其移到其最近的停靠位置,这可能会将选项卡式或 untabbed。

  • 取消所有停靠

    单击取消停靠所有窗口菜单可将所有停靠窗口更改为浮动窗口。WinDbg 返回到它所占据的最后一个时间,它是浮动窗口的位置的每个停靠的窗口

  • MDI模拟

    选择MDI 仿真菜单使 WinDbg 来模拟窗口化的多文档界面 (MDI) 样式。 这种类型的窗口化不同于停靠模式,因为所有窗口都浮动,但在框架窗口内限制都浮动窗口。 引入了停靠模式之前,此行为来模拟 WinDbg 的行为。清除MDI 仿真上窗口菜单 WinDbg 回到停靠模式。

  • 自动打开反汇编窗口

    选择会自动打开反汇编菜单可导致反汇编窗口打开每次 WinDbg 开始调试会话。如果清除此命令,仍可以通过单击打开反汇编窗口反汇编上视图菜单中,按 ALT + 7,或单击反汇编 (Alt + F7) 按钮 (反汇编按钮的屏幕截图) 工具栏上。

1.6、帮助菜单

此部分将介绍以下命令帮助WinDbg 菜单:

  • 内容

    单击内容菜单打开内容此帮助文档中的选项卡。此命令相当于按下 f1 键。

  • 索引
    单击索引菜单打开索引此帮助文档中的选项卡。
  • 搜索
    单击搜索菜单打开搜索此帮助文档中的选项卡。
  • 关于

    单击有关菜单以打开一个消息框,显示了正在使用的 WinDbg 二进制文件的版本信息。单击确定以关闭此消息框。

 

1.2、编辑菜单

这个菜单可以提供Windbg里的各功能窗口的可选文本的编辑功能,比如源代码窗口、命令窗口等提供选择、复制、剪切和黏贴等基础编辑功能。

  • 剪切

    单击剪切编辑菜单中,删除所选的任何文本并将其移动到剪贴板。此命令是等效于按下 CTRL + X 或 SHIFT + DELETE,或单击剪切 (Ctrl + X) 按钮 (剪切按钮的屏幕截图) 工具栏上。可以使用剪切命令编辑菜单仅与停靠或选项卡式窗口,但可以与支持此功能的任何窗口使用键盘快捷方式和工具栏按钮。

  • 复制

    单击副本编辑菜单将所选的任何文本复制到剪贴板。此命令相当于按 CTRL + C 或 CTRL + INSERT 或单击复制 (Ctrl + C) 按钮 (复制按钮的屏幕截图) 工具栏上。可以使用复制命令仅使用停靠或选项卡式窗口。 与所有窗口都支持此功能,可以使用键盘快捷方式和工具栏按钮。

  • 粘贴

    单击粘贴编辑菜单粘贴剪贴板中当前光标位置到的文本。此命令相当于按 CTRL + V 或 SHIFT + INSERT 或单击粘贴 (Ctrl + V) 按钮 (粘贴按钮的屏幕截图) 工具栏上。可以使用粘贴命令仅使用停靠或选项卡式窗口。 但您可以与支持此功能的任何窗口使用键盘快捷方式和工具栏按钮。

  • 全选

    单击编辑菜单中进行选择的所有文本处于活动状态调试器命令窗口反汇编窗口源窗口,或对话框。此命令相当于按 CTRL + A。

  • 窗口中的文本写入文件

    单击向文件写入窗口文本编辑菜单保存到文件活动的调试信息窗口中的所有文本。此命令是活动窗口才可用调试器命令窗口调用窗口,或从头开始板。当您单击写入到文件的 Windows 文本,则向文件写入窗口文本对话框随即出现。

    在此对话框中,输入你想要将窗口文本保存的文件的名称。 可以在浏览将保存在列出的目录,您想应用程序或选择你想要覆盖特定文件。 默认文件扩展名为.txt。单击保存以保存该文件,或单击取消退出。

  • 添加到命令输出

    单击将添加到命令输出编辑菜单中要插入到注释调试器命令窗口。键入到注释文本框,然后单击确定您的评论显示在调试器命令窗口和任何打开的日志文件中。 但是,注释不会不会显示在任何远程连接到你的会话的 Windows 调试器中。

  •  清除命令
    单击清除命令输出编辑菜单上,以清除所有从文本调试器命令窗口和清除命令历史记录。

  • 评估所选内容

    单击评估所选内容编辑菜单来评估中的当前选定源窗口并显示在结果调试器命令窗口。此命令相当于按下 CTRL + SHIFT + V,单击评估所选内容在源窗口的快捷菜单上,或使用??(评估C++表达式)命令及作为其参数的所选文本。如果所选的文本中包含多个行,会产生语法错误。 如果在源窗口中不选择任何文本,则不能使用此命令。

  • 显示所选类型

    单击显示所选类型编辑菜单中的当前选定的数据类型确定源窗口并显示在类型调试器命令窗口。此命令相当于按 CTRL + SHIFT + Y 或单击显示所选的类型源窗口的快捷菜单上。如果所选的文本包括多个单个对象,可能会显示语法错误或其他异常结果。 如果在源窗口中不选择任何文本,则不能使用此命令。

  • 查找

    单击查找编辑菜单在活动的调试信息窗口中查找文本。请注意  必须是活动窗口调试器命令窗口源窗口此命令相当于按下 CTRL + F。当您单击查找,则查找对话框随即出现。

    在此对话框中,在查找内容框中,输入你想要查找的文本。 如果已经选择的文本,此文本将自动显示在查找内容框。在中方向区域中,单击向上指定你的搜索方向。 只要光标位于窗口开始执行搜索。 通过使用鼠标指针,可以将光标放在任何位置。选择仅全字匹配如果你想要搜索整个单词。 (如果在多个字词搜索时选择此选项,您一定会收到搜索失败。))选择区分大小写执行区分大小写的搜索。查找命令只会更改 WinDbg 显示。 此命令不会影响目标或任何其他调试器操作的执行。关闭后查找对话框中,您可以通过使用重复向前搜索编辑 |查找下一个命令或按 f3 键。 您可以通过按 SHIFT + F3 重复向后的搜索。

  • 查找下一个

    单击查找下一步编辑菜单可重复执行上一个搜索和查找下一个匹配项。此命令相当于按 f3 键。若要重复执行向后的搜索,请按 SHIFT + F3。如果以前未执行任何搜索,使用编辑 |查找下一步命令,请按 f3 键,或按 SHIFT + F3 以打开查找对话框中 (类似于编辑 |查找命令)。

  • 转到地址

    单击转到地址编辑菜单转到目标的虚拟地址空间中的地址。此命令相当于按下 CTRL + G。当您单击转到地址,则查看代码的偏移量对话框随即出现。

    在此对话框中,输入你想要将移动到的地址。 此地址可以是 (如函数、 符号或整数的内存地址) 的表达式或任何有效的地址的表达式。 如果地址是不明确,对话框将显示一个列表,其中包含所有不明确的项。请注意  如果将光标放在行内反汇编窗口源窗口,然后使用转到地址命令,所选行的地址将出现在视图代码偏移量对话框。 可以使用此地址,也可以替换所选的任何地址。单击后确定,调试器会插入符号 (^) 移动到开头的函数或在反汇编窗口或源窗口中的地址。可以使用转到地址命令在当前处于活动状态的任何窗口中。 如果调试器在反汇编模式下,WinDbg 在反汇编窗口中查找的地址。 如果调试器在源文件模式下,WinDbg 在源窗口中查找的地址。 如果在源窗口中找不到该地址,WinDbg 将查找其在反汇编窗口中。 如果在相应的窗口未打开,WinDbg 将打开它。转到地址命令只会更改 WinDbg 显示。 此命令不会影响目标或任何其他调试器操作的执行。

  • 转到行

    单击转到行编辑菜单在当前活动中搜索的特定行源窗口如果活动窗口不是源窗口,则此命令无效。此命令相当于按下 CTRL + L。当您单击转到行,则转到行对话框随即出现。

    在此对话框中,输入你想要查找,然后单击的行号确定调试器会将插入符号 (^) 移动到该行。 如果大于文件中的最后一行的行号,光标将移动到文件末尾。转到行命令只会更改 WinDbg 显示。 此命令不会影响目标或任何其他调试器操作的执行。

  • 转到当前指令

    单击转到当前指令编辑菜单可打开包含当前指令的调试信息窗口,从而突出显示此指令。此命令相当于按下 ALT + 星号 (使用数字键盘上的星号键)。如果当前指令对应于一个已知的源代码文件,将打开 WinDbg源窗口,其中包含此源文件。 如果不存在任何此类窗口,WinDbg 将打开一个。 突出显示当前行。如果当前指令不是已知的源代码文件中的和反汇编窗口是打开,请突出显示反汇编窗口和当前行的 WinDbg 随即打开。 但是,如果反汇编窗口已关闭,则转到当前指令命令不会打开。此命令仅更改 WinDbg 显示。 此命令不会影响目标或任何其他调试器操作的执行。

  • 设置当前指令

    单击设置当前指令编辑菜单指令指针的值更改为对应于当前行处于活动状态的指令源窗口.此命令相当于按 CTRL + SHIFT + I 或单击到当前行集指令指针源窗口的快捷菜单上。

  • 断点管理

    单击断点编辑菜单来显示或控制断点。此命令相当于按 ALT + F9。 如果源窗口反汇编窗口是未处于活动状态,还可以按 f9 或单击插入或删除断点 (f9) 按钮 (屏幕截图插入或删除断点按钮的) 工具栏上。但是,如果源窗口或反汇编窗口打开,请插入或删除断点 (F9) 按钮和 F9 键的当前行上设置断点。 (如果已经在当前行设置断点,此按钮或键将删除断点。)如果语句或调用跨多个行,WinDbg 在语句或调用的最后一行上设置断点。 应插入脱字号 (^),或要为整个语句设置断点的语句之前。 如果调试器无法在当前插入符号位置设置断点,它将在下一步允许位置的向下方向中搜索和插入断点存在。
    当您单击断点,则断点对话框随即出现。

    此对话框中显示所有当前断点信息,并且显示在以下列:


    • 断点数。 此数字是可用于后续命令中的断点是指一个十进制数。

    • 断点的状态。 此状态可以是e (启用) 或d (禁用)。

    • (仅未解析的断点)以字母u如果断点是无法解析的会出现此字母 (即,它不匹配任何当前加载的模块地址)。 有关详细信息,请参阅无法解析断点 (bu 断点)

    • 断点虚拟地址。 如果已启用的源行号的加载,显示内容包括文件和行号信息而不是地址的偏移量。 如果无法解析该断点,该地址会出现在末尾而不是此处的列表。

    • (仅适用于处理器断点)类型和大小的信息。 此信息可以是e (执行), r (读/写), w (写入) 或(输入/输出)。 这些类型后面带有块,以字节为单位的大小。 有关详细信息,请参阅处理器断点 (ba 断点)

    • 将该断点处于活动状态,直到剩余传递数后跟在括号中传递的初始数量。 程序计数器传递但不会中断的断点的次数是一个小于此数值的值。 因此,此数字是永远不会小于 1。 另请注意此数计数只能通过此点的应用程序执行的时间。 换而言之,不会计逐过程执行此点。 已达到最大计数后,您可以重置计数仅清除和重置断点。

    • 关联的进程和线程。 如果线程提供有三个星号 (***),此断点不是特定于线程的断点。

    • 模块和函数,使用的偏移量,对应于断点地址。 如果无法解析该断点,断点地址显示在这里,在括号中。 如果是有效的地址上设置断点,但缺少的符号信息,此列将为空。

    • 命中此断点时自动执行的命令字符串。 此命令字符串显示在引号中。 如果到达断点时,此命令字符串中的命令执行,直到恢复应用程序执行的位置。 任一命令继续执行程序 (如gt) 将停止执行命令列表。


    如果选择任何断点,然后可以单击删除禁用,或启用按钮。 删除按钮中永久删除的断点。 禁用按钮暂时停用断点。 启用按钮将重新启用已禁用的断点。

    全部删除按钮会将永久删除所有断点。

    您还可以输入中的命令命令框中的以下方法:



    时输入的新断点,还可以执行以下操作:


    • 通过输入中的线程说明符创建一个特定于线程的断点线程框。 不包括通常为前缀的线程说明符的波形符 (~) 字符。

    • 输入中的条件创建条件断点条件框。 条件可以是任何 evaluable 表达式,并且它将评估根据当前的表达式语法 (请参阅评估表达式)。 有关这些类型的断点的详细信息,请参阅设置条件断点

  • 打开/关闭日志文件
    单击打开/关闭日志文件编辑菜单写入到新的日志文件、 附加到现有的日志文件,或关闭打开的日志文件。
    当您单击打开/关闭日志文件,则打开/关闭日志文件对话框随即出现。

    此对话框显示当前的日志文件,如果已打开。如果日志文件名称框为空,则可以输入日志文件名称。 如果此文件已存在,WinDbg 将覆盖现有文件,除非已选择追加复选框。 如果指定文件名称,但没有路径,WinDbg 将文件放在开始从 WinDbg 的默认目录中。如果日志文件名称框中已显示文件名称,可以单击关闭打开的日志文件关闭此文件。 如果清除日志文件名称框并输入新的日志文件名称,将关闭以前的日志文件。单击确定以保存更改,或单击取消放弃更改。如果单击确定任何日志文件名称中出现时日志文件名称框中,它不起作用。 也就是说,WinDbg 不关闭日志文件或打开日志文件。
    但是,如果日志文件已处于活动状态并且单击确定而无需清除其名称或选择追加,WinDbg 中删除日志文件,并使用具有相同名称的新文件。

1.3、视图菜单
我们要看哪些功能窗口,可以在这个菜单下去找相应的菜单。

 

  • 命令窗口

    单击命令视图菜单打开调试器命令窗口如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 1 或单击命令 (Alt + 1) 按钮 (调试器命令窗口按钮的屏幕截图) 工具栏上。

  • 监视窗口

    单击Watch视图菜单以打开监视窗口。 如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 2 或单击Watch (Alt + 2) 按钮 (的监视按钮屏幕截图) 工具栏上。

  • 局部变量

    单击局部变量视图菜单以打开局部变量窗口。 如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 3 或单击局部变量 (Alt + 3) 按钮 (局部变量按钮的屏幕截图) 工具栏上。有关此窗口及其用法的详细信息,请参阅局部变量窗口

  • 寄存器

    单击注册视图菜单打开寄存器窗口如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 4 或单击寄存器 (Alt + 4) 按钮 (寄存器按钮的屏幕截图) 工具栏上。

  • 内存

    单击内存视图菜单打开一个新内存窗口请注意  可以有多个内存窗口同时打开。 每个窗口可以显示不同的区域的内存。 仅内存窗口和源窗口具有此功能。 所有其他调试信息窗口被限制为单个实例。视图命令等效于按 ALT + 5 或单击内存窗口 (Alt + 5) 按钮 (内存按钮的屏幕截图) 工具栏上。

  • 调用堆栈

    单击调用堆栈视图菜单打开调用窗口如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 6 或单击调用堆栈 (Alt + 6) 按钮 (调用堆栈按钮的屏幕截图) 工具栏上。

  • 反汇编

    单击反汇编视图菜单打开反汇编窗口如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 7 或单击反汇编 (Alt + 7) 按钮 (反汇编按钮的屏幕截图) 工具栏上。

  • 暂存器

    单击便笺视图菜单打开便笺。 如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 8 或单击草稿板 (Alt + 8) 按钮 (的草稿板按钮的屏幕截图) 工具栏上。

  • 进程/线程

    单击进程和线程视图菜单打开进程和线程窗口如果此窗口已打开,变为活动状态。此命令相当于按下 ALT + 9 或单击进程和线程 (Alt + 9) 按钮 (进程和线程按钮的屏幕截图) 工具栏上。

  • 命令浏览器

    单击命令浏览器视图菜单打开命令浏览器窗口如果此窗口已打开,变为活动状态。此命令相当于按 CTRL + N 或单击命令浏览器 (Ctrl + N) 按钮 (命令浏览器按钮的屏幕截图) 工具栏上。

  • 详细输出

    单击详细输出视图菜单启用详细模式下打开和关闭。此命令相当于按下 CTRL + ALT + V。 (和 KD 中按 CTRL + V)。启用详细模式后,某些显示的命令 (例如注册转储) 生成更详细的输出。 显示发送到调试器的每个模块加载操作。 并且每次将驱动程序或 DLL 加载的操作系统,调试器会通知。

  • 显示版本

    单击显示版本视图菜单可显示的调试器和所有已加载的扩展 Dll 的版本信息。 此信息显示在调试器命令窗口此命令相当于按下 CTRL + ALT + W (并按 CTRL + W 中 KD)。此命令具有相同的效果版本 (显示调试器版本)命令,只不过后一种命令还会显示 Microsoft Windows 操作系统的版本。

  • 工具栏
    选中或清除工具栏视图菜单可导致工具栏以显示或消失。
  • 状态栏
    选中或清除状态栏视图菜单使状态栏变得可见或不可见。
  • 字体

    单击字体视图菜单更改显示在调试窗口中的信息的字体。此命令是等效于单击字体按钮 (字体按钮的屏幕截图) 工具栏上。当您单击字体,则字体对话框随即出现。


    在此对话框中,您可以对从适当的列表中,选择字体、 样式和大小。 此外可以从下拉列表菜单,以获取相应的字母表中选择的脚本。 若要接受所做的更改,请单击确定单击取消可取消对字体更改。

  • 选项
    单击选项视图菜单打开选项对话框。 此命令等效于单击的按钮 (选项按钮的屏幕截图) 工具栏上。在中选项对话框中,可以选择或取消选择以下选项:

    选项卡宽度
    选项卡宽度框控制的制表符字符数在任何源窗口中的显示方式。 在中选项卡宽度框中,输入你想要具有每个选项卡设置之间的空格数。 (默认设置为 8。 文本属性的详细信息,请参阅更改文本属性。)

    打开此多后重复使用
    打开此多后的重用框控制的文档或源,可以同时打开的窗口数。 如果已达到指定的数目的源窗口,打开一个新的窗口会导致现有窗口关闭。 标记为选项卡形式停靠目标,请不要关闭 Windows。 若要关闭的最后一个 windows 是最近使用的。

    分析源代码语言
    如果分析源语言复选框处于选中状态,根据 simple 分析的源语法进行着色的所有源窗口中的源代码文本。 若要更改颜色,在颜色区域中的对话框中,选择一个语法元素,然后单击更改(若要在单个源窗口关闭语法颜色,请打开该窗口的快捷菜单,单击选择源语言,然后单击 <None>。)

    悬停时的评估
    如果悬停时的 Evaluate复选框处于选中状态 (和分析源代码语言同时选中复选框),将计算源窗口中的符号,当您选择该窗口,然后将鼠标悬停使用鼠标的符号。 计算的是与生成的相同dt (显示类型)命令。

    输入重复最后一个命令
    如果Enter 重复最后一个命令复选框处于选中状态,可以按 ENTER 键在空中提示调试器命令窗口重复前一命令。 如果清除此复选框,ENTER 键,会生成新提示。

    自动滚动
    自动滚动复选框控制自动滚动的新文本发送到调试器命令窗口时发生。 如果你想要关闭此功能,请清除自动滚动复选框。 有关此滚动的详细信息,请参阅使用调试器命令

    工作区的提示
    在中工作区会提示区域中,您可以单击三个选项之一来确定时间和频率在 WinDbg 中保存工作区。


    • 如果单击总是询问,当工作区更改 (例如当调试会话结束时),调试器将显示工作区保存对话框中,您可以在其中保存工作区。

      工作区保存对话框中,如果单击不要再询问,WinDbg 将重置工作区会提示选项设置为永远不会保存始终保存

    • 如果单击始终保存,发生更改时自动保存在工作区。

    • 如果单击永远不会保存,工作区时不会保存更改,并不提示将其保存。


    快速编辑模式
    如果QuickEdit 模式复选框处于选中状态,可以右键单击要复制或粘贴到,具体取决于窗口中选择状态的项。 当清除此项检查时,快速编辑已禁用,可以右键单击要打开窗口的快捷菜单的项。 不能为单个窗口提供不同的设置;快速编辑设置全局适用于所有窗口。 默认情况下,选中此框。 快速编辑设置保存在当前工作区中。

    颜色
    若要更改显示的源文本的颜色,请选择一项颜色然后单击更改选择一种颜色,或选择自定义颜色,然后单击确定

    在中颜色菜单中,您可以更改以下各项的颜色:


    • 前 10 个项表示中的文本反汇编窗口源窗口

    • 更改数据文本项表示已更改的数据条目 (例如,在寄存器窗口)。

    • 前十位 Xxx项控制用于在源窗口中的语法元素的颜色。

    • 剩余的项目引用不同类型的调试器命令窗口中的文本。




    这些颜色更改为才会生效,当您单击时确定若要放弃这些更改,请单击取消
  • 源代码文件扩展名
    单击源语言文件扩展名视图菜单可控制 WinDbg 会识别为源文件扩展名的文件扩展名。 此外可以指定哪些编程语言都是与文件扩展名相关联。当您单击源语言文件扩展名,则源语言的文件扩展名对话框随即出现。

    在此对话框中,您可以添加或删除文件扩展名的方法是插入在游标扩展和语言框并键入相应的信息。 请确保指定适当的编程语言为每个文件扩展名。 例如, cxx =C++ 表示.cxx 文件扩展名为源文件,并且使用该扩展的任何文件的编程语言,在相应的已C++。 单击确定实现所做的更改,或单击取消要放弃所有更改。
  • Windbg命令行

    单击WinDbg 命令行视图菜单可显示用于打开当前的 WinDbg 会话的命令。此命令显示在小消息窗口中。 单击确定若要关闭此窗口。