2

我们正在将 Visual Studio 2010 解决方案迁移到 Visual Studio 2012。像往常一样,墨菲定律正在抬头。

我想做的事情相对简单,过去我已经做过很多次了——我只想附加到一个正在运行的 Windows 服务进程并进入它的代码。

FWIW 与该解决方案的其他项目,我能够按预期进入并调试代码 - 只是这个 Windows 服务给我们带来了问题。

我们已经验证了可能导致失败的明显事情......

1:我们已经确保 .pdb 调试符号与服务可执行文件和 DLL 一起包含

2:我们正在运行服务的调试版本。

我假设这只是 Visual Studio 2012 某个地方的一个愚蠢设置,它导致了这个......要么是那个,要么我错过了一些简单的东西,只需要第二双眼睛......

4

2 回答 2

1

调试服务最简单的方法是Assert(0)在运行()代码开头的某个位置插入调试版本。断言将在服务运行时弹出,允许您将您选择的调试器附加到它。然后你可以做任何你想做的事情(比如设置断点,改变内存中的值等)。

如果 Visual Studio 2012 仍然无法附加到您的断言服务,则说明安装或配置中存在严重问题。如果它附加但不会让您看到任何内容,您可能需要在附加时启用“本机代码”调试。

于 2013-05-16T16:16:06.803 回答
1

以下对我有用:

  1. 以调试模式构建 Windows 服务;
  2. 发布并安装在你的开发机器上;
  3. 从服务管理控制台启动服务;
  4. 从 Visual Studio 2012 中附加到进程

在此之后,我的断点立即被击中。

请注意:在第 4 步,您可能需要选择“显示所有用户的进程”以使您的服务可见以便能够附加到它,因为它可能在 SYSTEM 帐户下运行。

希望这可以帮助你摆脱追逐。

于 2013-07-04T11:53:37.490 回答