【发布时间】: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