分类 调试 下的文章

|(进程状态)

简介

(|) 命令显示指定进程的状态或当前正在调试你的所有进程。

使用形式

| Process

参数

  • Process
    指定要显示的进程。 如果省略此参数,将显示所有正在调试的进程。

支持环境

模式

仅限用户模式

目标

实时、 崩溃转储

平台

全部

备注

只能在用户模式下指定进程。可以在许多命令之前添加进程符号有关后跟命令。除非在启动调试会话时启用了子进程的调试,否则调试器只能使用一个进程。
下面的示例演示如何使用此命令。以下命令显示所有进程。

下面的示例显示如何使用此命令。 下面的命令显示所有进程。

2:005> |

以下命令还显示所有进程。

2:005> |*

下面的命令显示当前活动的进程。

2:005> |.

下面的命令显示的进程的最初引发异常 (或到最初附加调试器)。

2:005> |#

下面的命令显示进程号 2。

2:005> |2

前一个命令显示以下输出。

0:002> |
#  0 id: 224   name: myprog.exe 
   1 id: 228   name: onechild.exe 
. 2 id: 22c   name: anotherchild.exe 

此输出在第一行,0 是十进制进程号、 224 是十六进制的进程 ID,Myprog.exe是进程的应用程序名称。 句点 (.) 之前进程 2 意味着,此进程是当前进程。 数字符号 (#) 进程 0 意味着此进程是最初引发异常的一个或调试器附加到之前。

符号文件的类型和它们的加载状态可以通过lm (List Loaded Modules)命令、 !lmi扩展命令或 WinDbg的Debug | Modules菜单命令获取。

它们都可以显示已加载的模块和它们的符号的信息。

下面这些缩写是这些命令产生的输出中使用的:

缩写含义
deferred 模块已经加载,但是调试器还没有尝试加载它的符号。符号将在需要的时候被加载。查看延迟符号加载获取详细信息。
# 符号文件和可执行文件的时间戳或者校验和有一些不匹配。
T 时间戳丢失、不能访问或者等于0。
C 校验和丢失、不可访问或者等于0。
DIA 符号文件通过调试接口访问(Debug Interface Access (DIA))被加载。
Export 没有找到实际的符号文件,所以符号信息是从二进制文件的导出表中获得的。
M 符号文件和可执行文件得时间戳或校验和有些不匹配。但是,因为符号选项的原因符号文件仍然被加载了。
PERF 该二进制文件包含性能优化后的代码。标准的地址计算方法可能产生不正确的结果。
Stripped 调试信息已经从映像文件中剥离出来了。
PDB 符号是.pdb格式的。
COFF 符号是通用对象文件格式(common object file format (COFF))的。

||(系统状态)

简介

双竖线 ( || ) 命令将打印指定的系统或当前正在调试的所有系统的状态。

使用形式

|| System 

参数

  • System
    指定要显示的系统。 如果省略此参数,将显示正在调试的所有系统。

支持环境

模式

调试多个目标

目标

实时、 崩溃转储

平台

全部

备注

|| 命令仅在调试多个目标很有用。 很多,但并非所有的多个目标调试会话涉及多个系统。每个系统列表包括服务器名称和协议详细信息。 系统上运行调试器都会被视为 <本地>下面的示例显示如何使用此命令。 下面的命令显示所有系统。

下面的示例显示如何使用此命令。 下面的命令显示所有系统。

3:2:005> ||

以下命令还显示所有系统。

3:2:005> ||*

下面的命令显示当前处于活动状态的系统。

3:2:005> ||.

下面的命令显示系统中有最新的异常或中断。

3:2:005> ||#

下面的命令显示系统编号 2。

3:2:005> ||2

下面的命令是在dmp文件下。

0:001> ||
.  0 Full memory user mini dump: F:\XXX\V3.5.3\XXXX.7504.dmp

符号用来直接操作被调试程序的助记符(tokens)。例如,可以通过命令bp main来在main函数上设置断点,或者使用dd MyInt L1命令来显示整数变量MyInt 的值。很多情况下,符号可以作为调试器命令的参数。可以支持大多数数字参数,以及一些文本参数。除了常规的符号语法之外,也有一些适用于各种单独情况的语法规则。

常规符号语法规则

符号名由一个或多个字符组成,但是总是以字母、下划线(_)、问号(?)或美元符号($)开头。

符号名可以用模块名来进行限制。使用一个感叹号(!)来分隔模块名和符号(例如,mymodule!main)。没有使用模块名的时候,符号也可以用感叹号作为前缀。即使对于局部变量,使用不带模块名的感叹号也尤其有用,它可以向调试器命令指明某个参数是一个名字而不是16进制数字。例如,如果没有加上感叹号前缀或者-n选项的话,变量fade会被命令dt (Display Type)当作一个地址来读取。但是,可以通过加上美元符号( $ )和感叹号( ! )当作前缀来指明一个符号是局部变量,如$!lime

符号名是完全不区分大小写的。这意味着如果程序中同时存在myIntMyInt ,不能被调试器正确识别;不管怎么写,访问它们的命令都有可能访问到另外一个。

数值表达式中的符号语法

调试器可以识别两种不同的表达式:Microsoft宏汇编(MASM)表达式和C++表达式。由于和符号相关,这两种语法形式有以下区别:

  • 在MASM表达式中,每个符号都被解释成地址。根据该符号引用的内容不同,它可以是全局变量、局部变量、函数、段、模块的地址或者其他任何可识别的标志。
  • 在C++ 表达式中,符号根据它的类型来解释。根据引用内容的不同,可能被解释为整数、数据结构、函数指针或任何其他数据类型。不符合C++数据类型的符号(例如未更改的模块名)都会产生语法错误。

关于如何使用每一种语法的说明,查看表达式求值。

如果使用MSAM表达式语法,任何可以被解释为16进制数或寄存器的符号(例如,BadFeed, ebX)都必须用感叹号作为前缀。这能确保调试器将它识别为符号。

ss (Set Symbol Suffix)命令可以用来设置符号后缀。这使得调试器在找不到符号的情况下自动在符号名后添加"A" 或者"W"。

很多Win32函数存在ASCII和Unicode版本。这些函数的名字后被分别添加了"A" 或"W"。使用符号后缀可以帮助调试器搜索这些符号。

后缀匹配默认没有激活。

文本表达式中的符号语法

符号可以用于一些命令的文本参数 — 例如bm (Set Breakpoint)x (Examine Symbols)

这些文本参数支持很多通配符和说明。查看字符串通配符语法获取详细信息。除标准字符串通配符之外,用来指定符号的文本表达式也可以使用一个下划线作为前缀。当对这样的符号进行匹配时,调试器把它当作任意数量的下划线,包括零。

匹配文本表达式中的符号时,不会使用符号后缀。

.write_cmd_hist

简介

.write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件。

使用形式

.write_cmd_histFilename

参数

  • Filename
    指定要创建的文件的路径和文件名。

支持环境

此命令仅在 WinDbg 中可用,并能在脚本文件。

模式

用户模式下,内核模式

目标

实时、 崩溃转储

平台

全部