Debugging Tools for Windows

.reload (Reload Module)

.reload 命令删除指定模块的所有符号信息,并且按需要重新加载这些符号。某些情况下,该命令也会重新加载或卸载模块本身。

语法

.reload [Options] [Module [= Address [Size [Timestamp] ] ] ] 
.reload -? 

参数

Options
任意下面的选项:
/d
重新加载调试器模块列表中的所有模块。(省略所有参数时,这是用户模式调试下的默认行为。)
/f
强制调试器立即加载符号。该参数会覆盖延迟符号加载。更多信息,查看下面的注释节。
/i
忽略.pdb文件版本不匹配的情况。(如果没有包含该参数,调试器不会加载不匹配的符号文件。) 使用 /i时,即使没有明确指定,也会使用/f
/l
列出模块但是不重加载它们的符号。(内核模式下,使用该参数的输出和!drivers 扩展命令一样。)
/n
仅重加载内核符号。该参数不会重加载任何用户模式符号。(只能在内核模式调试时使用该选项。)
/o
强制覆盖符号服务器的下游存储(downstream store)中的缓存文件。使用该标志时,还需要包含/f。默认情况下,下游存储中的文件永远不会被覆盖。

由于符号服务器对每个版本的二进制文件的符号使用不同的名字,除非确认下游存储被破坏了,否则不需要使用该选项。

/s
重新加载系统的模块映像列表中所有模块。(省略所有参数时,在内核模式下这是默认行为。) 如果在用户模式调试时使用名字来单独加载某个系统模块,则必须包含/s
/u
卸载指定模块和它的所有符号。调试器卸载任何名字匹配Module 的模块,不管它的全路径是什么。映像名也会被搜索。更多信息,查看下面的注释节。
/unl
基于已卸载模块列表中的映像信息重新加载符号。
/user
仅重加载用户模式符号。(只能在内核模式调试时使用该选项。)
/v
打开详细显示。
/w
Module 当作一个字面上的字符串。这样可以避免调试器展开通配符。
Module
指定主控机要重加载符号的目标机上的映像名。Module 需要包含文件的名字和扩展名。如果没有使用/w 选项,Module 可以包含各种通配符和修饰符。该语法的更多信息,查看字符串通配符语法。如果省略Module.reload 命令的行为由使用的Options 决定。
Address
指定模块的基地址。一般来说只有在映像头被破坏或者页换出时才需要该地址。
Size
指定模块映像的大小。很多情况下,调试器会知道模块的正确大小。当调试器不知道正确大小时,就需要指定Size。该大小可以是实际的模块大小或者更大的数字,但是不能更小。一般来说,只有在映像头被破坏或者页换出时才需要该大小。
Timestamp
指定模块映像的时间戳。很多情况下,调试器会知道模块的正确时间戳。当调试器不知道正确的时间戳时,就需要指定Timestamp一般来说,只有在映像头被破坏或者页换出时才需要指定。
-?
显示这个命令的简短帮助文本。

环境

模式 用户模式、内核模式
目标 活动目标、崩溃转储
平台 所有

注释

.reload 并不会造成符号信息的读取,而是告诉调试器符号文件可能改变了,或者新的模块被添加到模块列表中。该命令使得调试器修改它的模块列表,并且删除指定模块的符号信息。每个单独的.pdb 中的符号信息直到实际被需要之前都不会被读取。(这种加载称为延迟符号加载。)

可以使用/f 选项或者执行ld (Load Symbols)命令来强制符号加载。

.reload 命令在系统停止响应(即崩溃),使得被调试的目标机的符号信息丢失时很有用。该命令在更新了符号树时也很有用。

如果映像头因为像模块被卸载或者被页换出之类的原因出错了,可以通过使用/unl参数或者同时指定AddressSize 来正确加载符号。

.reload /u 命令进行更广泛的搜索。调试器首先尝试使用Module 匹配精确的模块名,不管路径是什么。如果找不到匹配项,Module 被当作已加载的映像名。例如,如果HAL在内存中的名字为halacpi.dll,下面两个命令都可以卸载它的符号。

kd> .reload /u halacpi.dll

kd> .reload /u hal

如果在进行用户模式调试,并且希望加载一个不在目标程序模块列表中的模块,必须像下面的例子一样使用/s 选项。

0:000> .reload /u ntdll.dll
Unloaded ntdll.dll

0:000> .reload /s /f ntdll.dll

附加信息

关于延迟符号加载的更多信息,查看延迟符号加载。关于其他符号选项的更多信息,查看设置符号选项

Build machine: CAPEBUILD