Visual Studio 调试器无法使用 F10

Visual Studio Debugger Not working with F10

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

Debug → Attach to Process

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

Windows → Modules

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

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

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

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

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

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

In addition to this, you can also use logs to read and note all the progress. where actually code is.
And I personally prefer logs for windows service debugging

它说

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

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

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

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

  5. (可选)在 Visual Studio 菜单栏上,依次选择“工具”、“选项”。在 Options对话框,选择Debugging,Symbols,select Microsoft 符号服务器复选框,然后选择确定按钮。

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

    进程对话框出现。

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

  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 服务。

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