【发布时间】:2018-06-14 10:22:05
【问题描述】:
我正在使用 Topshelf 创建一个 Windows 服务,该服务使用 chrome Selenium 驱动程序来操作和解析各种网页。
虽然服务代码在普通 (NetCore2) 控制台测试应用程序中运行良好,但在 Topshelf 所需的 Win32 控制台应用程序下运行时出现问题。
不幸的是,我无法弄清楚如何调试底层服务代码。 VS2017 调试器似乎已附加到 Topshelf 控制台应用程序,但不会让我进入底层服务代码,该代码位于单独的 NetStandard2 类库中。具体来说,当我来到 Topshelf 控制台应用程序中的这一行时:
var scanEntry = _scanner.Run();
其中 _scanner 是执行实际扫描的对象的一个实例,我无法单步执行代码(即 F11 只是跨行)。
我尝试在类库扫描代码中插入以下行:
System.Diagnostics.Debugger.Launch();
但它什么也没做;代码一直在愉快地执行。
我怀疑这与扫描代码在 Topshelf 启动的单独进程中运行有关。但是我一直无法弄清楚如何通过 Visual Studio 的 Attach to Process 机制来识别它。
如果底层服务代码在 Topshelf 下运行时如何调试它,我们将不胜感激。
其他信息
当我尝试在 _scanner.Run() 行停止并使用上下文菜单单步进入类库代码(而不是使用 F11)时,系统提示我关闭 Just My Code,我照做了。 VS 调试器随后尝试单步执行类库代码,但抱怨找不到类库的符号文件 (*.pdb)。
这真的很奇怪,因为 Topshelf 控制台应用程序的 bin 文件夹中存在一个具有该名称的符号文件。
我尝试从 bin 文件夹手动打开 pdb 文件,但收到错误消息“在此文件夹中找不到匹配的符号文件”。
这是否与尝试从普通的旧 Net 控制台应用程序中调试 NetStandard2 类库有关?
【问题讨论】:
标签: c# visual-studio-debugging topshelf