如何断点调试被 .exe 程序调用的 C# 类库? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn
V2EX    程序员

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

  •  
  •   yodhcn
    yodhcn 2022-04-26 12:07:26 +08:00 3099 次点击
    这是一个创建于 1267 天前的主题,其中的信息可能已经有所发展或是发生改变。

    楼主在尝试开发一个 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 有些出入,也可能是楼主对两个文档都没有正确理解,所以还是来这里请有经验的人帮忙了。

    第 1 条附言    2022-04-26 19:11:12 +08:00
    模块 Jellyfin.Plugin.Template.dll 的

    "符号加载信息":
    此模块是 ngen.exe 工具创建的预编译二进制文件。调试器不会尝试为这些二进制文件加载符号,而是在由 .NET 运行时加载时,为原始 dll/exe 加载符号。

    "符号状态":
    本机调试器跳过为托管模块加载符号。

    正常不应该是这样的吧?模块符号没有正常加载?
    11 条回复    2022-04-26 19:33:31 +08:00
    ysc3839
        1
    ysc3839  
       2022-04-26 13:06:07 +08:00 via Android
    调试器类型要选择“托管”(Managed),开始调试后,去模块列表找到你的 DLL ,确保调试符号已经加载
    userforg2021
        2
    userforg2021  
       2022-04-26 13:48:23 +08:00
    试试插件入口点加一句
    System.Diagnostics.Debugger.Launch();
    然后不使用 VS 调试,直接启动软件,正常情况下会弹出选择框让你选 VS 实例,选择打开了源码的 VS 就行了。
    7075
        4
    7075  
       022-04-26 14:02:49 +08:00
    attach
    Blackricky
        5
    Blackricky  
       2022-04-26 14:13:40 +08:00
    附加到进程?
    yodhcn
        6
    yodhcn  
    OP
       2022-04-26 16:06:03 +08:00
    @min 我有把生成的 .dll 文件 和相应的 .pdb 文件一同复制到 jellyfin 插件文件夹
    yodhcn
        7
    yodhcn  
    OP
       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
        8
    ysc3839  
       2022-04-26 18:18:25 +08:00
    @yodhcn 看图感觉是调试器类型没选托管
    wudicgi
        9
    wudicgi  
       2022-04-26 19:01:47 +08:00
    如果你的 dll 文件和 exe 程序在同一解决方案内,那么一种简单的调试方法是,将 dll 的项目设为启动项目,同时配置启动的命令行为那个 exe 程序的完整路径
    hackfly
        10
    hackfly  
       2022-04-26 19:25:34 +08:00
    没加载符号,看不到代码内容的也调试不了。这还不如在 od 反汇编;在模块窗口,选中 DLL ,右键加载符号,看能不能加载符号
    yodhcn
        11
    yodhcn  
    OP
       2022-04-26 19:33:31 +08:00
    @hackfly 你看我的 "第 1 条附言"
    不是找不到符号,而是不知为何跳过了符号的加载
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2797 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:50 PVG 22:50 LAX 07:50 JFK 10:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86