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

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

我正在尝试使用 Visual Studio 2012 Premium 工具获取用 C++ 编写的 Windows 服务(我们称之为 hello.exe)的代码覆盖率。到目前为止,我已尝试使用此 post 的答案中概述的方法:How to use MS code coverage tool in command line?

为了您的方便,给出的步骤是 运行:

  1. vsinstr /coverage hello.exe
  2. 启动 vsperfmon /coverage /输出:mytestrun.coverage
  3. hello.exe
  4. vsperfcmd /关机

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

额外信息:为了解决这个问题,我遇到了另一个名为 CodeCoverage.exe 的代码覆盖实用程序(Microsoft Visual Studio 11.0\Team Tools\Dynamic代码覆盖工具)。那是我应该用于此任务的吗?另外,我在这里 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,使用上述命令开始监控、启动服务、进行测试、停止服务并关闭监控。

希望对以后的人有所帮助。