【问题标题】:a matching symbol file was not found in this folder在此文件夹中未找到匹配的符号文件
【发布时间】:2011-07-15 15:33:10
【问题描述】:

我想使用调试符号,但收到以下错误:

在此文件夹中找不到匹配的符号文件

这是什么问题,如何解决?

【问题讨论】:

    标签: c# visual-studio debugging


    【解决方案1】:

    我遇到的一件事是因为在引用代码所在的项目上调试已关闭。就我而言,我做了一个名为“Developer”的新配置,默认情况下调试是关闭的。

    1. 右键单击有问题的项目
    2. 属性
    3. 构建
    4. 高级(右下角)
    5. 将调试信息设置为完整
    6. 重新编译

    【讨论】:

    • 对于 dotnet core 2.0 控制台应用程序,在我将其目标框架从 netcoreapp2.0 更改为 net4.7 后,调试不再起作用。但是,将 ...-> Advanced -> Output --> Debug Information:portable 更改为 full 修复它。谢谢!
    • 谢谢,如果您在 NetFX 项目中使用 NetStandard 引用,您也需要这样做。
    • 这对我不起作用。当我选择 pdb 文件时,我得到了那个臭名昭著的错误。
    • 这不是我的解决方案。但我在 Resharper 插件中找到了解决方案。在模块窗口中,右键单击,Resharper 可以选择从参考 dll 生成代码。
    【解决方案2】:

    我遇到了与@DmainEvent 相同的问题。显然我使用的dll与我刚刚编译的pdb版本不同,所以我收到了错误消息。

    如果您遇到此问题,请尝试使用同一编译运行中的 dll 和 pdb。

    【讨论】:

    • 遇到了完全相同的问题。我手动复制了一个 pdb,但它与正在执行的预编译 C++ dll 不匹配。我想我应该知道得更好,但这成功了。
    • 这解决了我的问题,我也是手动将 pdb 文件复制到另一个项目中。我用另一个项目和调试器生成的 dll 覆盖了 dll,而不是自动拾取 pdb,我不必指定路径。谢谢!
    【解决方案3】:

    我得到的错误是“在这个文件夹中找不到匹配的符号文件”即使在 DLL 和 PDB 都可用并一起构建之后,调试 => 模块窗口也是如此,所以我无法调试到目标 DLL被我的主要项目引用。

    在此处发布此内容以帮助某人浏览目标 DLL 的“混合平台”构建。我做了两件事来解决这个问题:

    1. 在使用目标 DLL 的解决方案中,取消选中 Tools => Options => Debugging => General => Enable Just My Code (JMC) 中的“Just My Code”。

    2. 在相关项目属性中的目标 DLL 解决方案中勾选“启用本机代码调试” => 调试。

    【讨论】:

    • 请格式化您的答案,使其更具可读性(粗体、斜体、列表、代码缩进等)
    • 这解决了我的问题。我在尝试在测试服务器上调试的 Web 应用程序中嵌入了一个 Web 服务,并且我有一个通过本地调试器启动的测试客户端。好吧,它一定是重新构建了 web 应用程序,因为它没有加载符号,所以我发布了(尽管 web 项目没有代码更改),附加到服务器 w3wp 进程,然后启动了一个实例我的客户,现在它正在工作。我再次尝试使用Enable native code debugging 未选中它仍然有效;第三次尝试启用Just My Code 并且仍然有效;关键是 PDB + DLL 是一起构建的,我想。
    【解决方案4】:

    我尝试了所有可能的解决方案,最终当我禁用Properties > DebugDebugger engines 下的选项Enable native code debugging 时它起作用了。

    【讨论】:

    • 检查这个标志也对我有用。症状就像海报描述的那样。
    【解决方案5】:

    我遇到了这个问题,答案很简单。

    Visual Studio 有两个可以创建 .pdb 文件的项目级设置。

    1. 链接器:配置属性 -> 链接器 -> 调试 -> 生成 程序数据库文件 = "xxxx.pdb"
    2. 编译器:配置属性 -> C/C++ -> 输出文件 -> 程序数据库文件名 = “yyyy.pdb”

    您希望 #1 进行调试。忘记#2。 为文件 #2 指定与文件 #1 不同的名称以解决此错误。

    我不知道为什么微软将 #2 指定为 .pdb 文件。这只是令人困惑。

    【讨论】:

    • 该问题带有标签c#,因此这些设置不适用
    • 在我的情况下,这些设置仅在主应用程序是托管代码并且我尝试调试由包装器执行的本机代码时才相关。当我直接通过本机 C++ 测试器应用程序调试本机 C++ 时,尽管 pdb 文件被覆盖,它会以某种方式神奇地获取调试信息。所以这些设置确实适用并帮助我解决了我的问题。
    • 这个关于设置两个令人困惑的 .pdb 文件路径的建议适用于我的本机代码项目。只是,我只是将两个路径名 #1 和 #2 设置为相同。
    【解决方案6】:

    我已经修复了我的调试符号,使用这个工具强制它们匹配:

    chkmatch tool

    所以,我的问题是我试图调试我的项目,而调试器无法介入内部 nugets 源。我有nuget项目的源文件。视觉工作室仍然不接受我试图展示的 pdb 文件。 显示完全相同的错误:

    在此文件夹中找不到匹配的符号文件

    所以,我所做的就是将它添加到 nugets 项目的 .proj 文件中:

    <DebugType>full</DebugType>
    

    并使用重建选项再次创建了 dll 和 pdb 文件。 在我运行的命令行中:

    .\ChkMatch.exe -m name_of_your.dll name_of_your.pdb    
    

    它是这样说的:

    正在写入调试信息文件... 结果:成功。

    大成功! 所以,接下来,我将这个 dll 引用到我试图调试的项目中。当我尝试再次加载符号时,我工作了。

    希望对你有帮助。

    【讨论】:

      【解决方案7】:

      如果没有关于您正在做什么的更多详细信息,很难超越“调试器正在寻找与已编译代码匹配的符号文件,但在已编译代码所在的文件夹中找不到一个符号文件。”

      需要考虑的一些事情:

      1. 您是否将创建符号作为编译的一部分? (检查项目属性)
      2. 您是否使用符号服务器(如果是,它是否指向正确的位置)
      3. 这是来自第三方的编译代码吗?在这种情况下,由于您显然有源代码,请自行编译。

      如果您想要更好的答案,请考虑澄清您的问题。尤其是“我想使用符号”是什么意思。

      【讨论】:

      • 我想使用符号服务器
      • 我不断收到错误消息,告诉我在此文件夹中找不到符号文件...当我用自己的两只眼睛看到在文件夹中找到了符号文件 (pdb) 文件时同名。这告诉我文件不一样。但是当我刚刚编译了这个东西并得到了一个全新的 pdb 文件时,这怎么可能呢?顺便说一句,这是在 bin 文件夹中。
      • @SoftwareSavant 你找到答案了吗?
      【解决方案8】:

      对于 BizTalk(和其他)项目,这可能是因为 GAC 中已经存在您尝试调试的程序集版本。当您运行单元测试或按 F5 进行调试时,会在本地编译一个新版本。但是,正在使用GAC中的版本,并且新创建的PDB与GAC中的DLL不匹配。

      解决此问题的一种方法是使用配置管理器取消选择除单元测试项目之外的所有内容的构建,如下所示:

      【讨论】:

        【解决方案9】:

        嗯,解决方案取决于您的具体问题。我尝试了所有可能在 Stackoverflow 和其他网站上找到的东西。我关注的线程之一是this。那也没有帮助。 当我注意到我的 executable 项目不包含对我要调试的 library 的引用时,问题立即得到解决。所以我只是添加了对该项目的引用。

        **PS: ** 这个问题也可能出现,因为可执行程序集引用的程序集可能与引用中的不匹配。因此,在这种情况下,您只需删除已经存在的引用并添加新的引用。

        希望这会有所帮助!

        【讨论】:

        • 那么如何在 Visual Studio 中为项目添加所谓的“引用”?
        【解决方案10】:

        同样的情况发生在我身上,因为项目的.pdb文件没有复制到debug\Bin文件夹,所以无法从.pdb文件中加载符号。

        您必须重新构建项目并手动将符号(.pdb 文件)复制到可执行项目的debug\Bin 文件夹中。

        【讨论】:

          【解决方案11】:

          我试图为我们本地开发服务器上发布的已安装 nuget 包加载符号。我不得不卸载并添加一个从代码构建的普通参考。这对我有用。只需记住在完成调试后再次安装原始 nuget 包。

          【讨论】:

            【解决方案12】:

            如果它适合您,请尝试在 dll 本身中嵌入调试符号,以便自动加载符号。这在 netcoreapp3.1 和 net5.0 中对我有用:

            <DebugType>Embedded</DebugType>
            <EmbedAllSources>True</EmbedAllSources>
            

            请注意,您可能会在文档中找到此内容:

            <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
            

            但它不起作用。

            【讨论】:

              【解决方案13】:

              我在 Visual Studio 2022 中遇到了这个问题,在这里尝试了大部分答案。通过切换回 Visual Studio 2019 修复,似乎是 2022 年的一个错误。

              【讨论】:

                【解决方案14】:

                我发现这是因为属性 => 调试 => 启动操作设置为启动外部程序而不是项目。所以新生成的pdb文件不匹配,因为实际的exe是错误的。

                【讨论】:

                  【解决方案15】:

                  我最近也遇到了这个问题。 可以通过选择 MyProject->Properties->Linker->Debugging->Generate Debug Info->“优化调试 (/DEBUG)”来修复它。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2020-12-06
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-03-14
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多