【问题标题】:No symbols have been loaded and pdb file missing未加载任何符号且缺少 pdb 文件
【发布时间】:2012-01-20 21:48:59
【问题描述】:

我试图了解为什么在尝试调试我的网站应用程序时收到“断点当前不会被命中。没有为此文档加载任何符号”消息(注意:没有 Web 应用程序,以防万一很重要)

到目前为止,我发现pdb(项目调试数据库)文件与源代码一样重要,它应该出现在bin文件夹中,但无论出于何种原因,该文件丢失了,只是一些dll放在那里,实际上整个目录中没有pdb文件。

我的第一个问题是:无论正在开发什么类型的项目,都应该有一个 pdb 文件。对吗?

第二个问题:如何重新创建该文件,或者需要执行哪些步骤才能再次调试项目?

【问题讨论】:

    标签: asp.net visual-studio-2008 pdb-files


    【解决方案1】:

    您必须拥有可编译的代码才能获取 pdb。听起来像你。

    通常发生的情况是您已将构建设置为“发布”而不是“调试”。

    http://msdn.microsoft.com/en-us/library/wx0123s5.aspx

    如果您正在创建 Web 应用程序,您的配置文件可能还具有“零售”设置。如果设置为 true,您将始终处于“发布”模式,即使在您的构建配置中另有说明。

    http://msdn.microsoft.com/en-us/library/ms228298(v=vs.80).aspx

    【讨论】:

    • 用另一个潜在的解决方案更新了答案。
    • Release模式依然会生成pdb文件
    • @AdrianIftode 有时,是的。有时,没有。 stackoverflow.com/questions/291214/…
    • 真的,谢谢。 web.config 文件中还有编译部分,可以设置编译选项。它适用于 ASP .Net 为 aspx 和 ascx 文件生成的 dll。如果有一些
    • 在网站案例中,文件背后的代码是由 ASP .Net 编译的,而不是你用 Visual Studio 编译的,所以 bin 文件夹中没有 dll 和 pdb 文件,这些文件由 ASP .Net 管理当网站“在线”时。 Bin 文件夹可以包含其他 dll 和 pdb 文件。
    【解决方案2】:

    为了解决这个问题,我做了几件事:

    • 清除临时 ASP.NET 文件(C:\Windows\Microsoft .NET\Framework{version}\Temporary ASP.NET files{site}(您需要退出 Visual Studio 和任何指向开发站点的 Web 浏览器) )
    • 启动任务管理器并右键单击 W3WP.EXE 进程,选择 SET AFFINITY 并取消选中除一个 CPU 以外的所有 CPU

    通常如果我这样做,然后附加到 W3WP 进程进行调试,断点将被填充,我可以单步执行我的代码。

    【讨论】:

    • 嗨,蒂姆,感谢您的澄清,但我没有看到 W3WP.EXE 进程在任务管理器中运行。还有一个问题,现在我可以像我说的那样再次调试我的网站,但是我仍然有一些符号尚未加载的 dll,关于如何解决这个问题的任何想法?
    • 我假设您正在通过 VS 调试器运行,而不是附加到进程。尝试删除临时 ASP.NET 文件并再次运行调试器。
    • 我关闭VS也无法删除临时的asp.net文件,我必须注销然后重新登录,你觉得很奇怪吗?
    • 我已经看到 IIS 也将文件锁定在我身上,一点也不奇怪。 (有时它让我发疯)尝试 iisreset /stop,关闭所有连接到该站点的 Web 浏览器,关闭 VS,然后再次尝试删除文件。完成后记得执行 iisreset /start。
    • 谢谢,你知道吗?在某些页面中,断点有效(显示为已填充),但在其他页面中没有,仍然是奇怪的事情:s
    【解决方案3】:

    要在 Release 中生成 .pdb 文件,您需要设置项目的属性:

    编译\高级编译选项\生成调试信息 => 'pdb-only' 或 'Full'

    打包/发布 Web\排除生成的调试符号 => 取消勾选

    【讨论】:

      【解决方案4】:

      我刚遇到这个问题,结果发现我的 web.config 设置为 debug=false。
      确保 web.config 中的编译 debug=true

      <compilation defaultLanguage="vb" debug="true" batch="false" targetFramework="4.0">
        <assemblies>
          <!-- add references to gac assemblies here-->
        </assemblies>
      </compilation>
      

      【讨论】:

      • 是的。太糟糕了,每篇关于 ASP.NET 安全的文章都说这是一个主要的安全风险。想要堆栈跟踪中没有安全性和行号?艰难...
      • 这只适用于 prod 环境,这是正确的。
      • 在 cmets 中讨论这个问题可能有点不合适,但为什么在现实生活中无法知道行号是正确的,prod-environment 未处理的异常?
      【解决方案5】:

      在我寻求解决问题的过程中,我发现了这一点:

      首先,正如Adrian Iftode所说,在网站案例中,文件背后的代码是由ASP .Net编译的,而不是VS编译的,所以bin文件夹中没有dll和pdb文件。

      • 所以我从以下位置删除所有临时文件: windows\Microsoft .NET\Framework\v2.0.50727\Temporary ASP.NET files\

      其中包含您拥有的每个项目的文件夹。

      • 从 iexplorer 中删除所有临时文件
      • 在项目的 IIS 属性中\Directory\Configuration\Debugging\ 检查调试标志下方的两个选项。

      通过以上所有操作,我能够再次调试我的网站。

      【讨论】:

        【解决方案6】:

        除了上面 Resource 的回答之外,即使我正在运行调试版本,我也必须将要调试的项目的发布版本(在我的情况下为 NuGet 包)设置为“pdbonly”。我也使用 MyGet 作为符号服务器,但这样做我也可以使用本地版本进行调试。我有以下设置:

        发布版本上传到 MyGet NuGet 包服务器 调试版本上传到 MyGet Symbol 服务器

        【讨论】:

          猜你喜欢
          • 2023-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多