调试 Topshelf 服务

Debugging Topshelf Service

我正在使用 Topshelf 创建一个 Windows 服务,该服务使用 chrome Selenium 驱动程序来操作和解析各种网页。

虽然服务代码在普通 (NetCore2) 控制台测试应用程序中运行良好,但在 Topshelf 需要的 Win32 控制台应用程序下运行时会出现问题。

不幸的是,我一直无法弄清楚如何调试底层服务代码。 VS2017 调试器似乎附加到 Topshelf 控制台应用程序,但不会让我进入底层服务代码,它位于单独的 NetStandard2 class 库中。具体来说,当我来到 Topshelf 控制台应用程序中的这一行时:

var scanEntry = _scanner.Run();

其中 _scanner 是执行实际扫描的对象的一个​​实例,我无法进入代码(即,F11 只是跨过该行)。

我尝试将以下行插入到 class 库扫描代码中:

System.Diagnostics.Debugger.Launch();

但它什么也没做;代码一直在愉快地执行。

我怀疑这与扫描代码 运行 在 Topshelf 启动的单独进程中有关。但是我还没弄清楚如何通过Visual Studio的Attach to Process机制来识别它。

如果能提供有关如何在 Topshelf 下 运行 下调试底层服务代码的指示,将不胜感激。

附加信息

当我尝试停在 _scanner.Run() 行,并使用上下文菜单单步进入 class 库代码(而不是使用 F11)时,系统提示我关闭只是我的代码,我做到了。然后 VS 调试器尝试进入 class 库代码,但抱怨找不到库的符号文件 (*.pdb)。

这真的很奇怪,因为 Topshelf 控制台应用程序的 bin 文件夹中存在同名的符号文件。

我尝试从 bin 文件夹中手动打开 pdb 文件,但收到一条错误消息 "A matching symbol file was not found in this folder"。

这是否与尝试从普通的旧 Net 控制台应用程序中调试 NetStandard2 class 库有关?

好的,事实证明问题与调试混合的 NetStandard 和 NetOriginal 代码库有关...

NetStandard class 库默认情况下不会生成 NetOriginal 应用程序可用的调试符号信息。您必须进入 Project Properties -> Build -> Advanced 并将生成的调试信息类型从 Portable 更改为 Full。

进行此更改后,我可以像往常一样进入 class 库代码。

我在 a matching symbol file was not found in this folder

找到了这个