如何让 Visual Studio 在调试时使用嵌入式源代码?

Posted

技术标签:

【中文标题】如何让 Visual Studio 在调试时使用嵌入式源代码?【英文标题】:How can I get Visual Studio to use Embedded Source code whilst debugging? 【发布时间】:2019-04-10 02:25:35 【问题描述】:

我已使用 csproj 文件中的 <EmbedAllSources> 元素将 C# 源代码嵌入到可移植 PDB 文件中,并且我已使用 <DebugType>embedded<DebugType> 将 pdb 嵌入到程序集中,如 Embedding C# sources in PDB with new csproj 中所述

我的程序集如下所示:

<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>    
    <EmbedAllSources>true</EmbedAllSources>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>embedded</DebugType>   
</PropertyGroup>

我可以确认 pdb 类型是可移植的,并且包含我的源代码:

根据 Visual Studio 15.5 的发行说明,调试器应该能够在调试期间使用这些文件:

https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-v15.5#EmbeddedSource

我使用的是 Visual Studio 2017(版本号 15.8.8)

但是,当我从我的程序集中按 F11 进入代码时,它会要求提供源代码:

在谷歌搜索时,ctaggart 在https://github.com/ctaggart/SourceLink/issues/192 的讨论中发表了评论,其中说运行 sourcelink print-urls 将打印“embed”,但我的不会,也许这是一个提示:

有没有人让它成功运行?如果是这样,你能告诉我我做错了什么吗?

【问题讨论】:

我不是专家,但也许这有用? blogs.msdn.microsoft.com/jimgries/2007/07/06/… 这是一个“行不通的问题”。浏览“尚未在 VS 中实现”的文章是非常痛苦的,他们最近工作很糟糕。不过15.8.8应该都已经整理好了。只需确保您使用的是最新的调试引擎:工具 > 选项 > 调试 > 常规,应取消选中“使用托管兼容模式”。除此之外,重新格式化磁盘或重新安装 VS 会很有吸引力。 我们可以看看您的符号 PDB 路径(工具菜单 > 选项 > 调试 > 符号),您能否向我们展示模块(调试菜单 > Windows > 模块)的屏幕截图,突出显示所在行您的 PDB 已加载? 我会尝试不同的机器/全新安装/VM 等并报告回来。有人真的有这个工作吗? @HansPassant 你是对的。我不确定我需要做的最低限度是什么,但我买了一个安装了 Windows 10 和 VS 2017 的新 SSD,它可以工作!!!如果您将此作为答案发布,我会接受,赏金将再开放 3 小时。 【参考方案1】:

最简单的方法是去:

Debug -&gt; Windows -&gt; Modules

在此列表中,您应该能够找到您的程序集 (dll/exe)。

Right click it -&gt; Load Symbols

它会询问从哪里加载符号。

导航到匹配的 .pdb 文件所在的目录。

它应该自动加载。在这个引用的程序集中步入或出现未捕获的错误应该会触发该代码的中断,或者要求您导航到与引发错误的文件相对应的代码文件。

在我们的过程中,我们通常必须导航到 nuget 缓存以查找已安装的 nuget 包的 pdb。 (%UserProfile%/nuget/packages/YourPackage/VersionNumber/../..)

我们还将源代码与这些包一起打包并导航到那些/nuget/packages .cs 文件,不过,任何corresponding .cs 文件都应该允许它加载。

【讨论】:

没有 PDB 文件。 OP 使用 PDB 的 Embedded 选项,因此它实际上在 exe 或 dll 中。

以上是关于如何让 Visual Studio 在调试时使用嵌入式源代码?的主要内容,如果未能解决你的问题,请参考以下文章

程序终止时如何让 Visual Studio 不关闭终端窗口?

如何在 Visual Studio 中仅调试一个线程 [重复]

在调试模式下执行控制台应用程序后,如何让 Visual Studio 暂停?

Visual Studio:如何在修改成员变量时停止调试器?

如何让 Visual Studio 调试器在没有焦点的情况下中断

调试 IIS 时关闭 Visual Studio 附加安全警告