Visual Studio Team System 对Unmanaged code 的Code Coverage支持

本文介绍如何使用Visual Studio Team System (VSTS) 进行代码覆盖率(CodeCoverage)测试。通过安装VSTS并设置环境变量,可以对本地二进制文件进行Instrumentation,收集测试过程中的代码覆盖数据。文章还提供了一个结合CxxTest单元测试框架的例子,展示了如何配置Makefile以自动获取单元测试的代码覆盖率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要利用VS进行Code Coverage,你必须安装VSTS版本,找到VSTS安装目录Microsoft Visual Studio 8/Team Tools/Performance Tools,将这个目录加到你的环境变量PATH里。

第一步,进行Code Coverage,首先要instrument你的native binary文件。

vsintr -coverage target.exe

运行之后,该命令将会在目标binary文件中加入一些instrumentation代码用来收集运行信息。

第二步,然后启动coverage monitor来收集信息,并将输出结果到一个文件。

start vsperfmon -coverage -output:mytestrun.coverage

接下来,你可以运行你的程序代码或测试代码,并且运行结束后,你得告诉monitor你运行或测试结束,运行命令:

vsperfcmd -shutdown

这个命令将会等到目标进程结束,这时将有一个.coverage文件产生,如果用VS打开这个文件,你将会看到一个code coverage result窗口,里面有你刚才运行的结果。

现在我们简单结合Unit Test一个例子说明,在这里使用CxxTest测试框架,有关CxxTest测试框架,可以访问http://cxxtest.sourceforge.net/

以下为UnitTest的Makefile文件:

TESTS = ./*.

PERL
=
perl 

#
 Where the CxxTest distribution is unpacked 

CXXTESTDIR 
= 
cxxtestinstallpath 

#
 Check CXXTESTDIR 

!
if !exist($(CXXTESTDIR)cxxtestgen.pl)
 

!error Please fix CXXTESTDIR 

!endif 

!include 
<win32.mak>
 

#
 cxxtestgen needs Perl or Python 

!
if defined(PERL)
 

CXXTESTGEN 
= $(PERL) $(CXXTESTDIR)/cxxtestgen.
pl 

!elseif defined
(PYTHON)
 

CXXTESTGEN 
= $(PYTHON) $(CXXTESTDIR)/cxxtestgen.
py 

!
else
 

!error You must define PERL or PYTHON 

!endif 

all: runner
.cpp runner.obj runner.exe binplace run
 

#
 The arguments to pass to cxxtestgen 

#
 - ParenPrinter is the way MSVC likes its compilation errors 

# - --have-eh/--abort-on-fail are nice when
 you have them 

#CXXTESTGEN_FLAGS = --gui=Win32Gui --runner=ParenPrinter --have-eh --abort-on
-fail 

CXXTESTGEN_FLAGS 
= --runner=ParenPrinter --have-eh --abort-on
-fail 

# How to generate the test runner, "runner.cpp"
 

runner
.cpp: $(TESTS)
 

$(CXXTESTGEN) $(CXXTESTGEN_FLAGS) -o $$(TESTS)
 

runner
.obj: runner.
cpp 

$(CC) -EHsc $(cdebug) $(cflags) $(cvars) runner.
cpp 

runner
.exe: runner.
obj 

$(link) $(ldebug) $(conflags) $*.obj target.lib /out:runner.
exe 


binplace: runner
.
exe 

xcopy *.dll . //



# Command
-line arguments to the runner 

RUNNER_FLAGS 
= -title "CxxTest Runner"
 

# How to run the tests, which should be in runner.
exe 

run
: binplace 

set PATH="
C:/Program Files/Microsoft Visual Studio 8/Team Tools/Performance Tools";PATH 

vsinstr.exe -coverage target.dll 

start vsperfmon.exe -coverage -output:runner.coverage 

runner.exe $(RUNNER_FLAGS) 

vsperfcmd.exe -shutdown 

clean: 

del runner.* 

del *.dll

这样我们在每次build时候就能知道自己Unit Test的Code Coverage结果。

 

### 如何在 Visual Studio 2010 中配置机器人开发环境 #### 安装必要的工具和库 为了成功配置用于机器人的开发环境,在 Visual Studio 2010 上需确保已安装以下组件: - **Microsoft .NET Framework**: 这是运行基于.NET的应用程序所必需的基础框架。通常情况下,Visual Studio 的安装会自动包含此部分[^2]。 - **Robot Operating System (ROS)** 或者其他的机器人控制平台:如果计划使用 ROS,则需要按照官方指南完成其设置过程。对于 Windows 用户来说,可能更倾向于寻找支持Windows版本的替代方案或者是跨平台兼容的选择。 - **第三方库的支持**:例如 PCL(Point Cloud Library),这对于涉及三维数据处理的任务非常重要。可以参照类似的配置流程来适应不同的编译器版本,比如从针对 VS2019 的说明调整至适用于 VS2010 的情况[^1]。 #### 创建新的解决方案和项目结构 启动 Visual Studio 2010 并创建一个新的工程文件夹作为工作区。选择适合于目标硬件架构(如 x86/x64)以及编程语言(C++/C#/Python等)的新建项目模板。考虑到长期维护性和性能优化方面的要求,建议优先考虑托管代码(.NET Managed Code)而非非托管(Native Unmanaged Code)[^3]。 #### 设置项目的属性页 进入项目的属性管理界面,这里能够定义预处理器宏、链接外部依赖项以及其他重要的构建参数。特别是当涉及到多线程操作或是特定传感器接口时,这些选项显得尤为关键。另外还需要指定正确的输出路径以便后续调试与部署阶段顺利进行。 #### 添加额外资源和服务引用 根据具体需求引入相应的服务或API客户端类库。如果是从事计算机视觉领域的工作,那么 OpenCV 及其附加模块将是不可或缺的一部分;而对于自然语言理解任务而言,则可探索 Microsoft Cognitive Services API 等云端服务的可能性[^4]。 #### 测试并验证初始配置的有效性 编写简单的测试函数以确认整个系统的连通性良好,并能正常响应来自物理设备的消息输入。这一步骤有助于尽早发现潜在的问题所在,从而及时作出相应修正措施。 ```csharp using System; namespace RobotProjectTest { class Program{ static void Main(string[] args){ Console.WriteLine("Hello, this is a robot project setup test."); // Add your code here to interact with hardware or simulate actions. } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值