如何使用Visual Studio检测和获取Windows服务的代码覆盖率?

How to instrument and get code coverage of a Windows service with Visual Studio?

本文关键字:服务 Windows 代码覆盖率 获取 何使用 Visual Studio 检测      更新时间:2023-10-16

我正在尝试使用Visual Studio 2012 Premium工具获取用C++编写的Windows服务的代码覆盖率(我们称之为hello.exe)。到目前为止,我已经尝试使用本文答案中概述的方法:如何在命令行中使用MS代码覆盖率工具?

为方便起见,给出的步骤是运行:

  1. vsinstr/coverage 你好.exe
  2. start vsperfmon/coverage/output:mytestrun.coverage
  3. 你好.exe
  4. vsperfcmd/shutdown

当我在命令提示符下将其作为可执行文件启动时,我能够检测、测试和获取 .coverage 文件.exe没有问题。但是,如果我尝试在步骤 3 中将其作为服务启动(通过 services.msc 手动或 win32serviceutil。Python中的StartService),没有任何注册,覆盖文件为空。我在这里缺少什么吗?

额外信息:为了解决这个问题,我遇到了另一个代码覆盖实用程序,称为CodeCoverage.exe(Microsoft Visual Studio 11.0\Team Tools\Dynamic Code Coverage Tools)。这就是我应该用于此任务的内容吗?另外,我在这里发现了一些看似相关的东西 https://msdn.microsoft.com/en-us/library/dd255408.aspx,但是(原谅我的无知)不确定.NET服务是否与Windows服务相同。

在这里回答我自己的问题,经过大量的尝试和翻阅文档,我发现:

https://blogs.msdn.microsoft.com/hilliao/2008/08/19/code-coverage-using-visual-studio-2008s-code-coverage-tools/

基本上,Windows 服务与进程不同,因此我们必须启用跨会话标志并在监视时指定用户。

start vsperfmon /coverage /output:mytestrun.coverage /cs /user:”Everyone”

因此,只需像往常一样检测 exe,使用上述命令开始监视,启动服务,执行测试,停止服务并关闭监视。

希望它在未来对某人有所帮助。