若要收集 VSS 基础结构的跟踪信息,可以使用 VssTrace 工具、Logman 工具或 Tracelog 工具。 VssTrace 在 Microsoft Windows 软件开发工具包 (SDK) 中提供,可用于跟踪 Windows 7 及更高版本的 Windows 操作系统上的 VSS 应用程序。 Logman 是跟踪事件和性能计数器的跟踪控制器;它还可用于跟踪 Windows 7 及更高版本的 Windows 操作系统上的 VSS 应用程序。 Tracelog 包含在 Windows 驱动程序工具包 (WDK) 中。
若要将跟踪工具与自动系统恢复 (ASR) 配合使用,请参阅将跟踪工具与 ASR 应用程序配合使用。
注意
VssTrace、Logman 和 Tracelog 都需要管理员权限。
有关每个工具的信息,请参阅以下章节:
使用 VssTrace
VssTrace 命令行选项
使用 Logman
使用 Tracelog
使用 VssTrace
若要从命令行运行 VssTrace 工具,请使用以下语法:
VssTrace 命令行选项
若要显示 VssTrace 工具的简洁命令行帮助,请使用以下语法:
vsstrace -help
若要显示 VssTrace 工具的命令行帮助细节,请使用以下语法:
vsstrace -help all
VssTrace 命令行选项
VssTrace 工具使用以下命令行选项:
-f 标志
启用由标志位掩码指定标志的模块。 每个标志对应一个 VSS 模块。 如果标志为零,则不会启用任何模块。 请注意,大多数模块默认处于启用状态。 此选项不能与 **+**Module 选项结合使用。 例如,vsstrace -f 0 +WRITER +COORD 禁用默认启用的所有模块的跟踪,并启用 VSS 编写器和 VSS 服务的跟踪。 或者,vsstrace +f 0xffff -COORD 支持跟踪除 VSS 服务以外的所有模块。
注意
如果将 -f 选项与 **+**Module 选项一起使用,则 -f 必须出现在 **+**Module 选项之前。
下表列出了每个可用模块的模块名称和标志。
模块
标记
默认启用
跟踪的项目
EXCEPT
0x00000001
是
C++ 异常处理。
COORD
0x00000002
是
VSS 服务,也称为 VSS 协调器。
SWPRV
0x00000004
是
VSS 系统卷影复制提供程序服务。
BUCOMP
0x00000008
是
VSS 请求者和备份元数据处理。
WRITER
0x00000010
是
VSS 编写器操作和 VSS 托管的编写器实现,例如 Windows 注册表编写器。
VSSAPI
0x00000020
是
由 VSSAPI.DLL 导出的 VSS API 的其他函数。
HWDIAG
0x00000040
是
VSS 硬件提供程序基础结构和操作。
ADMIN
0x00000080
是
VSS 命令行实用工具,例如 VSSADMIN.EXE 和 DISKSHADOW.EXE。
VSSUI
0x00000100
是
共享文件夹配置用户界面 (UI) 的卷影副本。 仅在 Windows 服务器操作系统上提供 UI。
TEST
0x00000200
是
不适用。 (此跟踪模块是保留模块。)
IOCTL
0x00000400
是
VSS 服务通过调用 DeviceIoControl 函数启动的 FSCTL 和 IOCTL 操作的详细信息。
GEN
0x00000800
是
常规 VSS 实用工具函数,例如分配器、字符串类以及注册表和卷操作。
WRXML
0x00001000
否
编写器元数据的 XML 处理。 该模块的噪音水平非常高。
VSSXML
0x00002000
否
XML 处理基类。 该模块的噪音水平非常高。
**+**模块
启用 Module 指定的模块。 一次可以启用多个模块。 若要列出可用的模块,请在命令行提示符下键入 vsstrace –help modules。
-模块
禁用 Module 指定的模块。 若要列出可用的模块,请在命令行提示符下键入 vsstrace –help modules。
+pid ProcessId
启用 ProcessId 指定的进程。 若要启用所有进程,请使用“*”表示 ProcessId 的值。 一次可以指定多个 pid 选项。 选项的顺序决定了启用或禁用哪些进程。 例如,若要仅启用进程标识符为 0xe8c 的进程,请使用 vsstrace -pid * +pid 0xe8c。
-pid ProcessId
禁用 ProcessId 指定的进程。 若要禁用所有进程,请使用“*”表示 ProcessId 的值。 一次可以指定多个 pid 选项。 选项的顺序决定了启用或禁用哪些进程。 例如,若要禁用除进程标识符为 0xe8c 的进程之外的所有进程,请使用 vsstrace -pid * +pid 0xe8c。
+tid ThreadId
启用 ThreadId 指定的线程。 若要启用所有线程,请使用“*”表示 ThreadId 的值。 一次可以指定多个 tid 选项。 选项的顺序决定了启用或禁用哪些线程。 例如,若要仅启用进程标识符为 0x31a 的线程,请使用 vsstrace -tid * +tid 0x31a。
-tid ThreadId
禁用 ThreadId 指定的线程。 若要禁用所有线程,请使用“*”表示 ThreadId 的值。 一次可以指定多个 tid 选项。 选项的顺序决定了启用或禁用哪些线程。 例如,若要禁用进程标识符为 0x31a 的线程之外的所有线程,请使用 vsstrace -tid * +tid 0x31a。
-l Level
使用 Level 指定的跟踪级别。 级别越高,跟踪输出越详细。 每个级别都包括所有较低的级别。 默认级别为 170。 以下级别可用。
Level
跟踪输出中包含的信息
0.00
无
020
灾难性错误
030
未经处理的异常
040
错误
050
断言
060
警告
080
异常处理
100
事件记录活动
120
常规信息
140
代码流
160
函数进入和退出
170
函数返回值
180
函数参数(简洁)
190
函数参数(详细)
200
详细信息级别 1
210
详细信息级别 2
220
详细信息级别 3
230
快速代码级别 1
240
快速代码级别 2
250
快速代码级别 3
255
All
+indent
缩进每个函数和子函数边界的格式化跟踪输出。
-indent
不要缩进格式化的跟踪输出。
-etl EtlFile
将 EtlFile 指定的 Logman 输出文件转换为可读文本格式。
-o OutputFile
将跟踪信息保存到 OutputFile 指定的输出文件中。 为了获得最佳性能,输出文件应位于不属于卷影副本的卷上。
-help HelpOption
显示由 HelpOption 指定的命令行帮助。 有效的 HelpOption 值是 模块、级别和所有。 指定模块会列出模块。 指定级别会列出可用的级别。 指定所有会显示详细帮助。 如果未使用任何选项,则会显示简明帮助。
使用 Logman
以下步骤介绍了如何将 Logman 与 VSS 应用程序配合使用。
将 Logman 与 VSS 应用程序配合使用
使用以下命令开始跟踪:
logman start vss -o *x:\*vss.etl -ets -p {9138500e-3648-4edb-aa4c-859e9f7b7c38} 0xfff 170
注意
将“x:\”替换为要存储跟踪日志文件的目录路径。
使用以下命令停止跟踪:
logman stop vss -ets
跟踪日志文件为 *x:\*vss.etl。
有关 Logman 工具的详细信息,请参阅 Logman。
使用 Tracelog
以下过程介绍如何使用 Tracelog。
使用 Tracelog
创建一个名为 vss.ctl 的文本文件,该文件仅包含以下文本:
9138500e-3648-4edb-aa4c-859e9f7b7c38 vss
使用以下命令开始跟踪:
tracelog -start vss -f *x:\*vss.etl -guid vss.ctl -flag 0xff -level 0xaa
注意
将“x:\”替换为要存储跟踪日志文件的目录路径。
使用以下命令停止跟踪:
tracelog -stop vss
跟踪日志文件为 *x:\*vss.etl。
有关 Tracelog 工具的详细信息,请参阅 Tracelog。