【问题标题】:Visual Studio loads the incorrect file version from SymbolCache for debuggingVisual Studio 从 SymbolCache 加载不正确的文件版本以进行调试
【发布时间】:2017-11-22 23:36:45
【问题描述】:

我正在使用符号/源服务器来存储私有 nuget 包。这些包是使用“nuget pack”命令使用 -symbols 标志构建的,然后推送到服务器。

Visual Studio (2015) 在第一次调试特定包时从服务器正确加载符号/源。当我尝试调试该软件包的不同版本时会出现问题。只要 SymbolCache 目录中有任何版本的源文件可用,Visual Studio 就会使用该版本进行调试。

当我清除 SymbolCache 目录时,它会再次从符号/源服务器加载正确的文件版本并将其放入 SymbolCache。

示例:

  1. 我有一个包“testpackage”,Application-A 使用版本 1.0.1,Application-B 使用 testpackage 版本 1.0.2
  2. 我通过 Application-B 从 testpackage 调试代码
  3. testpackage 1.0.2 的源文件被复制到 SymbolCache 目录并在调试时正确使用
  4. 我通过 Application-A 从 testpackage 调试代码
  5. 使用 1.0.2 版本的源文件代替 1.0.1

在第 6 步中,我希望将版本 1.0.1 复制到 SymbolCache 目录并用于调试

我在调试期间检查了“模块”窗口,它显示正确的 pdb 是从缓存中加载的,或者如果不存在,则 pdb 是从符号服务器加载的。每个包版本都有一个包含符号文件的目录。

即使使用了正确的符号文件,它仍然会加载错误的源文件,直到我清除 SymbolCache。

【问题讨论】:

    标签: visual-studio visual-studio-2015 nuget nuget-package visual-studio-debugging


    【解决方案1】:

    Visual Studio 从 SymbolCache 加载错误的文件版本进行调试

    此问题可能是由 pdb 文件不匹配引起的。可以选择Debug -> Windows -> Modules,在Modules窗口,右击符号项,选择Symbol Load Information,在弹出的窗口中可以看到pdb文件是否加载,以及pdb文件是从哪里加载的.

    如果从错误的路径加载 pdb 文件,您可以通过单击符号设置...按钮(在符号加载信息对话框上)指定正确的符号位置。

    如果 pdb 文件从正确的位置加载,您的问题可能是 pdb 文件不匹配引起的,清除 SymbolCache 目录并从符号/源服务器重新加载它可能会有所帮助。

    AFAIK,如果您的 SymbolCache 文件夹中包含之前从 Symbol Server 下载的旧版本符号文件,则在您调试应用程序期间它不会再次下载它。一个可能的原因是,由于您的符号文件具有相同的名称但版本不同,VS 调试将首先从您的 SymbolCache 文件夹中搜索并加载符号文件,然后如果您的 SymbolCache 文件夹没有,则从符号服务器或其他人下载它他们。这就是您遇到此问题的原因。

    我可以建议的解决方法:使用不同的名称会更好

    希望这可以帮助您理解这个问题。

    【讨论】:

    • 我检查了“模块”窗口,它显示了从符号服务器获取的正确 pdb。所以它只是加载了错误的源文件。
    • 总是使用不同的名字根本不切实际,所以对我来说不是一个选择。
    • 确实,这不是一个好的解决方案,但我们目前似乎还没有非常好的方法来智能地清除 SymbolCache。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多