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;
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
它说
调试服务 在调试配置中构建您的服务。
安装您的服务。有关详细信息,请参阅如何:安装和
卸载服务。
从服务控制管理器、服务器启动您的服务
资源管理器,或来自代码。有关详细信息,请参阅如何:开始
服务。
使用管理凭据启动 Visual Studio 这样您就可以
附加到系统进程。
(可选)在 Visual Studio 菜单栏上,依次选择“工具”、“选项”。在
Options对话框,选择Debugging,Symbols,select
Microsoft 符号服务器复选框,然后选择确定按钮。
在菜单栏上,从“调试”或“工具”菜单中选择“附加到进程”。 (键盘:Ctrl+Alt+P)
进程对话框出现。
Select 从所有用户的复选框中显示进程。
在“可用流程”部分,选择适合您的流程
服务,然后选择附加。
Tip: The process will have the same name as the executable file for your service.
出现附加到进程对话框。
选择合适的选项,然后选择确定关闭
对话框。
Note: You are now in debug mode.
设置您要在代码中使用的任何断点。
访问服务控制管理器并操作您的服务,
发送停止、暂停和继续命令来命中断点。
有关 运行 服务控制管理器的详细信息,请参阅
如何:启动服务。另请参阅故障排除:调试 Windows
服务。
经过几个小时尝试不同的建议。我没有意识到它处于发布模式,所以它没有加载符号。 @RajM 分享的 link 实际上有一位用户对此发表评论,这就是我的发现。
我创建了一个 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;
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
它说
调试服务 在调试配置中构建您的服务。
安装您的服务。有关详细信息,请参阅如何:安装和 卸载服务。
从服务控制管理器、服务器启动您的服务 资源管理器,或来自代码。有关详细信息,请参阅如何:开始 服务。
使用管理凭据启动 Visual Studio 这样您就可以 附加到系统进程。
(可选)在 Visual Studio 菜单栏上,依次选择“工具”、“选项”。在 Options对话框,选择Debugging,Symbols,select Microsoft 符号服务器复选框,然后选择确定按钮。
在菜单栏上,从“调试”或“工具”菜单中选择“附加到进程”。 (键盘:Ctrl+Alt+P)
进程对话框出现。
Select 从所有用户的复选框中显示进程。
在“可用流程”部分,选择适合您的流程 服务,然后选择附加。
Tip: The process will have the same name as the executable file for your service.
出现附加到进程对话框。
选择合适的选项,然后选择确定关闭 对话框。
Note: You are now in debug mode.
设置您要在代码中使用的任何断点。
访问服务控制管理器并操作您的服务, 发送停止、暂停和继续命令来命中断点。 有关 运行 服务控制管理器的详细信息,请参阅 如何:启动服务。另请参阅故障排除:调试 Windows 服务。
经过几个小时尝试不同的建议。我没有意识到它处于发布模式,所以它没有加载符号。 @RajM 分享的 link 实际上有一位用户对此发表评论,这就是我的发现。