【问题标题】:Debugging Topshelf Service调试顶级服务
【发布时间】: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


    【解决方案1】:

    好的,原来问题与调试混合的 NetStandard 和 NetOriginal 代码库有关...

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

    完成此更改后,我就可以像往常一样进入类库代码。

    我在a matching symbol file was not found in this folder找到了这个

    【讨论】:

    • 由于该问题已经解决,您可以将其标记为答案,这样可以帮助遇到相同问题的其他社区成员。祝你有美好的一天:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2013-03-26
    相关资源
    最近更新 更多