调试 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
找到了这个
我正在使用 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
找到了这个