【问题标题】:VS2008 on Win7 64-Bit: Debugging a Windows ServiceVS2008 on Win7 64-Bit:调试Windows服务
【发布时间】:2010-11-26 19:07:00
【问题描述】:

我正在尝试在 Win7 64 位上使用 VS2008 调试 Windows 服务。我遇到的问题是,无论我选择哪种构建配置:x86、x64 或 AnyCPU,我的断点都没有被命中。

在服务启动后使用“附加到进程”,没有一个断点被命中 - 但 IDE 没有通知我它们不会被命中(例如,通过制作实心红色圆圈和轮廓) - 它看起来好像断点根本不存在。

任何人都可以在这里指出正确的方向吗?

谢谢

/理查德。

【问题讨论】:

    标签: .net visual-studio windows-7 windows-services 64-bit


    【解决方案1】:

    首先要明确的问题...

    • 您是在调试模式还是发布模式下编译?
    • .pdb 文件是否位于安装服务的位置?
    • 您确定设置断点的代码实际上正在执行吗?

    如果这些都不是问题,请尝试在您的服务的构造函数中插入以下行。

    System.Diagnostics.Debugger.Break();
    

    服务启动时,系统会提示您选择调试器。当调试器打开时,它将在程序断点处暂停,您可以从那里继续。我不使用 Windows 7,但我预计 Visual Studio 2008 的这方面与 Windows XP 相比没有太大变化。我一直使用这种编程方法来进入我的 Windows 服务的调试会话。

    【讨论】:

    • 在调试模式下编译,PDB 文件位于预期位置,100% 确定设置断点的代码正在执行。我使用了 Debugger.Break() 方法,但没有奏效。还是不会破!
    • 我已将此问题标记为答案,因为尽管不是直接导致解决的操作,但您对编译模式的评论使我走上了正确的道路。最终,问题在于尝试在混合 x86/x64 解决方案中调试应用程序,显然 IDE 在 Win7 x64 上不喜欢这种解决方案。像 x86 一样重新编译所有东西就可以了。谢谢。
    • 感谢您的投票。请注意...我认为您仍然可以回答自己的问题,然后接受该答案。
    【解决方案2】:

    我知道这不能回答您的直接问题,但我们来自 Eric De Carufel 的 found this approach 在开发和测试窗口服务时非常有帮助。

    它是非侵入性的,摆脱了繁琐的“附加到进程”步骤。

    在已部署为 Windows 服务时将其投入调试的能力也很有价值。例如,查看堆栈跟踪而不是服务在您身上死去。

    【讨论】:

      【解决方案3】:

      您是否以管理员身份运行 Visual Studio(包括在 UAC 下启动提升)?

      【讨论】:

        猜你喜欢
        • 2012-05-01
        • 2011-08-04
        • 2012-07-20
        • 2019-04-04
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        相关资源
        最近更新 更多