【问题标题】:Visual Studio Debugger Not working with F10Visual Studio 调试器不适用于 F10
【发布时间】:2021-09-28 01:40:21
【问题描述】:

我创建了一个 Windows 服务项目。当服务打开时,我使用

调试 → 附加到进程

它开始显示符号尚未加载,所以我进入

Windows → 模块

并手动加载符号。我能够获得要命中的断点,但是当我点击 F10 来单步执行代码时,它会跳过大量代码而不是单步执行。有谁知道为什么会这样?是因为我用来加载符号的工作吗?

更新:我有一个用 C# 编写的 DLL。当代码进入该 DLL 时,它完全可以正常工作,并且正确地步进和退出没有问题。但在 Windows 服务本身中,它似乎跳过了大量代码。

更新 2 抱歉,如果我不清楚。 Windows 服务是我编写的。我所有其他窗口服务都可以正常工作,没有这个问题。我已经能够在不使用 F5 的情况下成功地做到这一点,但它的这个特殊的 Windows 服务并没有在每个断点处停止。当我进入另一个 dll 中的代码时,它会正常中断并且一切正常。会不会是这个项目被破坏了?

【问题讨论】:

  • 为什么要附加到进程而不是直接使用 Visual Studio 调试器运行程序?
  • @gunr2171 这是一个 Windows 服务。你不能直接运行它。我理解调试的唯一方法是启动服务,然后附加到进程。
  • 这取决于您使用的 Windows 服务框架。您或多或少只是检测调试器是否正在运行并做一些稍微不同的事情:stackoverflow.com/questions/2255335/…
  • 目前尚不清楚您所说的 Windows 服务是您拥有项目/代码的服务,还是您无法控制的服务。如果是前者,正如 cmets 建议的那样,最好在直接使用 F5 调试时将其作为控制台应用程序启动,而不是附加。也许发布更多信息会给你一个更好的答案。
  • 好的,知道该服务在您的控制之下,您是否尝试过以下任何一种方法 1) F5 通过将启动命令设置为 NET START 来调试它,2) 编写代码来启动您的可执行文件,不是作为服务,而是作为控制台应用,然后F5调试?对于案例 #1,我希望设置选项以将符号嵌入 EXE 并在安装服务之前在调试模式下构建。

标签: visual-studio debugging windows-services


【解决方案1】:

请参考 Why does F10 (step over) in Visual Studio not work? 为了启用非托管部分的调试,应设置托管项目(启动项目)的属性:

Configuration Properties -> Debugging -> Enable Unmanaged Debugging = TRUE;

【讨论】:

    【解决方案2】:

    请参考 MS 文档 https://docs.microsoft.com/en-us/dotnet/framework/windows-services/how-to-debug-windows-service-applications#to-debug-a-service

    除此之外,您还可以使用日志来阅读和记录所有进度。实际代码在哪里。
    而且我个人更喜欢 Windows 服务调试日志

    它说

    1. 调试服务 在调试配置中构建您的服务。

    2. 安装您的服务。有关详细信息,请参阅如何:安装和 卸载服务。

    3. 从服务控制管理器、服务器启动您的服务 资源管理器,或来自代码。有关更多信息,请参阅如何:开始 服务。

    4. 使用管理凭据启动 Visual Studio,以便您可以 附加到系统进程。

    5. (可选)在 Visual Studio 菜单栏上,选择“工具”、“选项”。在 选项对话框,选择调试,符号,选择 Microsoft Symbol Servers 复选框,然后选择 OK 按钮。

    6. 在菜单栏上,从“调试”或“工具”菜单中选择“附加到进程”。 (键盘:Ctrl+Alt+P)

      出现“进程”对话框。

    7. 从所有用户的复选框中选择显示进程。

    8. 在“可用流程”部分中,选择适合您的流程 服务,然后选择附加。

       Tip: The process will have the same name as the executable file for your service.
      
    9. 将出现“附加到进程”对话框。

    10. 选择适当的选项,然后选择确定关闭 对话框。

       Note: You are now in debug mode.
      
    11. 设置您想在代码中使用的任何断点。

    12. 访问服务控制管理器并操作您的服务, 发送停止、暂停和继续命令来命中断点。 有关运行服务控制管理器的更多信息,请参阅 如何:启动服务。另请参阅疑难解答:调试 Windows 服务。

    【讨论】:

      【解决方案3】:

      经过数小时尝试不同的建议。我没有意识到它处于发布模式,所以它没有加载符号。 @RajM 分享的链接实际上有一个用户对此发表评论,这就是我发现的。

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 2023-02-16
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 2022-01-07
        相关资源
        最近更新 更多