VSInstr

VSInstr 工具用于检测二进制文件。 使用以下语法调用该工具:

VSInstr [/U] filename [/options]

下表描述了 VSInstr 工具选项:

选项 描述
Help? 显示帮助。
U 以 Unicode 形式写入重定向的控制台输出。 它必须是指定的第一个选项。
@filename 指定响应文件的名称,其中每行包含一个命令选项。 不要使用引号。
OutputPath:path 指定被检测映像的目标目录。 如果未指定输出路径,则通过在同一目录中向文件名追加“Orig”对原始的二进制文件进行重命名,并且会检测到二进制文件的副本。
Exclude:funcspec 指定要由探测从检测中排除的函数规范。 当函数中的分析探测插入造成不可预测或不需要的结果时,它将十分有用。

不要使用引用同一目录中的函数的“Exclude”和“Include”选项。

可使用单独的“Exclude”选项指定多个函数规范。

funcspec 被定义为:

[namespace<separator1>] [class<separator2>]function

对于本机代码,<separator1> 是 ::,对于托管代码,则是 .

<separator2> 始终为 ::

代码覆盖率支持 Exclude

支持通配符 *。 例如,若要排除命名空间中的所有函数,请使用:

MyNamespace::*

可以使用 VSInstr /DumpFuncs 列出指定二进制文件中的函数的完整名称。
Include:funcspec 指定二进制文件中的函数规范以使用探测进行检测。 未检测二进制文件中的所有其他函数。

可使用单独的“Include”选项指定多个函数规范。

请不要使用引用同一目录中的函数的“Include”和“Exclude”选项。

代码覆盖率不支持 Include

funcspec 被定义为:

[namespace<separator1>] [class<separator2>]function

对于本机代码,<separator1> 是 ::,对于托管代码,则是 .

<separator2> 始终为 ::

支持通配符 *。 例如,若要包括命名空间中的所有函数,请使用:

MyNamespace::*

可以使用 VSInstr /DumpFuncs 列出指定二进制文件中的函数的完整名称。
DumpFuncs 列出指定映像中的函数。 未执行任何检测。
ExcludeSmallFuncs 从检测中排除较小的函数,它们是不执行任何函数调用的短函数。 “ExcludeSmallFuncs”选项提供了更少的检测开销,因此提高了检测速度。

排除较小的函数也可减少进行分析所需的 .vsp 文件的大小和时间。
Mark: {Before|After|Top|Bottom},funcname,markid 插入可用于标识 .vsp 报表文件中数据区域的开始或结束处的分析标记(用于分隔报表中的数据的标识符)。

Before - 紧邻在目标函数进入前。

After - 紧邻目标函数退出后。

Top - 紧邻目标函数进入后。

Bottom - 紧邻目标函数中的每个返回值前。

funcname - 目标函数的名称

Markid - 用作分析标记的标识符的正整数(长整型)。
Coverage 执行覆盖率检测。 它只能用于以下选项:“Verbose”、“OutputPath”、“Exclude”和“Logfile” 。
Verbose “Verbose”选项用于查看检测进程的相关详细信息。
NoWarn[:[Message Number[;Message Number]]] 取消所有或特定警告。

Message Number - 警告编号。 如果省略 Message Number,则会取消所有警告。

有关详细信息,请参阅 VSInstr 警告
Control:{Thread | Process | Global} 指定以下 VSInstr 数据收集控制选项的分析级别:

Start

StartOnly

Suspend

StopOnly

SuspendOnly

ResumeOnly

Thread - 指定线程级别的数据集合控制功能。 仅为当前线程启动或停止分析。 其他线程的分析状态不会受到影响。 默认值为 thread。

Process - 指定进程级别的分析数据集合控制功能。 为当前进程中的所有线程启动或停止分析。 其他进程的分析状态不会受到影响。

Global - 指定全局级别(跨进程)的数据集合控制功能。

如果未指定分析级别,则会出现错误。
Start:{Inside | Outside},funcname 将数据收集的范围限制为该函数所调用的目标函数和子函数。

Inside - 紧邻在目标函数的入口后插入 StartProfile 函数。 紧邻在目标函数中的每次返回前插入 StopProfile 函数。

Outside - 紧邻在对目标函数的每次调用前插入 StopProfile 函数。 紧邻在对目标函数的每次调用后插入 StopProfile 函数。

funcname - 目标函数的名称。
Suspend:{Inside | Outside},funcname 排除该函数所调用的目标函数和子函数的数据集合。

Inside - 紧邻在目标函数的入口后插入 SuspendProfile 函数。 紧邻在目标函数中的每次返回前插入 ResumeProfile 函数。

Outside - 紧邻在目标函数的入口前插入 SuspendProfile 函数。 从目标函数中退出后立即插入 ResumeProfile 函数。

funcname - 目标函数的名称。

如果目标函数包含 StartProfile 函数,则会在其之前插入 SuspendProfile 函数。 如果目标函数包含 StopProfile 函数,则会在其之后插入 ResumeProfile 函数。
StartOnly:{Before | After | Top | Bottom},funcname 在分析运行期间开始数据收集。 它将在指定位置处插入 StartProfile API 函数。

Before - 紧邻在目标函数进入前。

After - 紧邻目标函数退出后。

Top - 紧邻目标函数进入后。

Bottom - 紧邻目标函数中的每个返回值前。

funcname - 目标函数的名称。
StopOnly: {Before|After|Top|Bottom},funcname 在分析运行期间停止数据收集。 它将在指定位置处插入 StopProfile 函数。

Before - 紧邻在目标函数进入前。

After - 紧邻目标函数退出后。

Top - 紧邻目标函数进入后。

Bottom - 紧邻目标函数中的每个返回值前。

funcname - 目标函数的名称。
SuspendOnly: {Before|After|Top|Bottom},funcname 在分析运行期间停止数据收集。 它将在指定位置处插入 SuspendProfile API 函数。

Before - 紧邻在目标函数进入前。

After - 紧邻目标函数退出后。

Top - 紧邻目标函数进入后。

Bottom - 紧邻目标函数中的每个返回值前。

funcname - 目标函数的名称。

如果目标函数包含 StartProfile 函数,则会在其之前插入 SuspendProfile 函数。
ResumeOnly: {Before|After|Top|Bottom},funcname 在分析运行期间开始或恢复数据收集。

它通常用于在 SuspendOnly 选项已停止分析后开始分析。 它将在指定位置处插入 ResumeProfile API 函数。

Before - 紧邻在目标函数进入前。

After - 紧邻目标函数退出后。

Top - 紧邻目标函数进入后。

Bottom - 紧邻目标函数中的每个返回值前。

funcname - 目标函数的名称。

如果目标函数包含 StopProfile 函数,则会在其之后插入 ResumeProfile 函数。

请参阅