如何断点调试被 .exe 程序调用的 C# 类库?

2022-04-26 12:07:26 +08:00
 yodhcn

楼主在尝试开发一个 jellyfin 插件,按照官方文档 https://github.com/jellyfin/jellyfin-plugin-template 配置环境,在调试时 Visual Studio 却提示"当前不会命中断点, 还没有为该文档加载任何符号"。
搞得一头雾水,恳请大佬能帮楼主捋一捋,到底是哪里出了问题。

环境:
便携版的 jellyfin 路径在 D:\jellyfin
被调试插件源码路径在 C:\Users\admin\Documents\GitHub\jellyfin-plugin-template
jellyfin 插件文件夹路径在 从 C:\Users\admin\AppData\Local\jellyfin\plugins
使用 Visual Studio 2022 调试代码

操作步骤:

  1. 按照文档的步骤 https://github.com/jellyfin/jellyfin-plugin-template#6a-set-up-debugging-on-visual-studio 将 D:\jellyfin\jellyfin.exe 设为 "启动项目"
    并在 Debug 模式下生成 Jellyfin.Plugin.Template.dll 文件
  2. 将 jellyfin-plugin-template\Jellyfin.Plugin.Template\bin\Debug\net6.0 文件夹下的内容全部复制到 jellyfin 的插件文件夹 C:\Users\admin\AppData\Local\jellyfin\plugins\Template
    设置断点
    点击 "启动" 开始调试

结果就是上图的那样,根据 Jellyfin 的日志,插件 Jellyfin.Plugin.Template.dll 已被正确加载,但在 Visual Studio 的源码上却没有命中断点。

我相信这实际上是一个 "visual studio 如何断点调试被 .exe 程序调用的 C# 类库?" 的问题,也查了 visual studio 文档 https://docs.microsoft.com/zh-cn/visualstudio/debugger/how-to-debug-from-a-dll-project?view=vs-2022

但觉得这和 jellyfin 的文档 https://github.com/jellyfin/jellyfin-plugin-template 有些出入,也可能是楼主对两个文档都没有正确理解,所以还是来这里请有经验的人帮忙了。

2509 次点击
所在节点    程序员
11 条回复
ysc3839
2022-04-26 13:06:07 +08:00
调试器类型要选择“托管”(Managed),开始调试后,去模块列表找到你的 DLL ,确保调试符号已经加载
userforg2021
2022-04-26 13:48:23 +08:00
试试插件入口点加一句
System.Diagnostics.Debugger.Launch();
然后不使用 VS 调试,直接启动软件,正常情况下会弹出选择框让你选 VS 实例,选择打开了源码的 VS 就行了。
min
2022-04-26 13:51:03 +08:00
7075
2022-04-26 14:02:49 +08:00
attach
Blackricky
2022-04-26 14:13:40 +08:00
附加到进程?
yodhcn
2022-04-26 16:06:03 +08:00
@min 我有把生成的 .dll 文件 和相应的 .pdb 文件一同复制到 jellyfin 插件文件夹
yodhcn
2022-04-26 16:13:40 +08:00
@ysc3839
抱歉,能说得具体一点吗?
下图是 visual studio "调试>窗口>模块" 的截图
https://cdn.jsdelivr.net/gh/hututu-tech/IMG-gongfeng@main/2022/04/26/6267a77a9a37b.png
符号状态:本机调试器跳过为托管模块加载符号。
ysc3839
2022-04-26 18:18:25 +08:00
@yodhcn 看图感觉是调试器类型没选托管
wudicgi
2022-04-26 19:01:47 +08:00
如果你的 dll 文件和 exe 程序在同一解决方案内,那么一种简单的调试方法是,将 dll 的项目设为启动项目,同时配置启动的命令行为那个 exe 程序的完整路径
hackfly
2022-04-26 19:25:34 +08:00
没加载符号,看不到代码内容的也调试不了。这还不如在 od 反汇编;在模块窗口,选中 DLL ,右键加载符号,看能不能加载符号
yodhcn
2022-04-26 19:33:31 +08:00
@hackfly 你看我的 "第 1 条附言"
不是找不到符号,而是不知为何跳过了符号的加载

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849326

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX