即使包含 PDB 文件,堆栈跟踪中也缺少行号
Posted
技术标签:
【中文标题】即使包含 PDB 文件,堆栈跟踪中也缺少行号【英文标题】:Missing line number in stack trace eventhough the PDB files are included 【发布时间】:2010-02-04 23:43:21 【问题描述】:这让我发疯了。我使用 VS 2008 使用 C# 实现了这个 Web 服务。我在 IIS 上发布它。我已经修改了发布版本,因此 pdb 文件与 dll 一起复制到 inetpub 上的目标目录中。
web.config 文件也有 debug=true。
然后我调用一个引发异常的 Web 服务。堆栈跟踪不包含行号。我不知道我在这里缺少什么,有什么想法吗?
其他信息: 如果我使用 VS 内置的 Web 服务器运行 Web 应用程序,它可以工作,并且我会在堆栈跟踪中获得行号。但是,如果我将 VS 内置 Web 服务器正在使用的相同文件(pdb 和 dll)复制到 IIS,堆栈跟踪中仍然缺少行号。
似乎与忽略pdb文件的IIS有关!
更新 当我发布到 IIS 时,所有 pdb 文件都发布在 bin 目录下,一切看起来都很好。但是当我转到与我的项目相关的特定目录下的“C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”时,我可以看到程序集(.dll)文件都在那里,但没有 pdb 文件。 但是,如果我使用 VS 内置 Web 服务器运行项目,则不会发生这种情况。 因此,如果我手动将 pdb 文件复制到 temp 文件夹,我可以看到行号。
知道为什么不将 pdb 文件复制到临时文件夹吗?
顺便说一句,当我附加到工作进程时,我可以看到它说符号已加载!
【问题讨论】:
您是否使用 WCF 调用该 Web 服务? IIS not giving line numbers in stack trace even though pdb present的可能重复 【参考方案1】:我遇到了同样的问题,并在阳光下尝试了所有方法来尝试修复它。直到我在这个类似的问题中找到公认的答案之前,没有任何效果:IIS not giving line numbers in stack trace even though pdb present。
事实证明,在 web.config 中使用了模拟:
<identity impersonate="true" />
导致堆栈跟踪中的行号丢失。我把条目拿出来,我的行号又回来了,把它放回去,几个小时后(Kerberos 票刷新?)行号又消失了。
不确定为什么模拟会影响堆栈跟踪,但确实会 - 很高兴有人确认/解释这一点...
我需要为我的大多数网站启用模拟(并且这些网站都有行号,去看看)所以我为这个特定网站禁用了它并获得了我的行号!!
【讨论】:
这是唯一对我有用的解决方案。我希望我的网站不需要“impersonate=true”。 谢谢,这是微软隐藏的小副作用之一,会让你浪费很多时间【参考方案2】:也许您要发布到的服务器在系统machine.config
文件中配置了<deployment retail="true" />
设置:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG
更多信息见:
ASP.NET configuration - deployment Element (ASP.NET Settings Schema)
只是一个想法。
【讨论】:
我检查了该文件,该文件中没有使用 VS 或 windbg 附加到工作进程,看看它是否能够找到您的 pdb 以及它是否与您的程序集匹配?
另一个常见原因是您实际上使用的是发布 dll [已优化]。我怀疑这与 IIS 有什么关系。
【讨论】:
.pdb 文件可以毫无问题地与“发布”或优化的 dll 一起使用。我已经做过很多次了。【参考方案4】:请确保在web.config中设置“debug=true”,没有它,异常中不会显示行号。
【讨论】:
【参考方案5】:不确定这是否有帮助,但在我的 VS2008 C# 项目属性中,在构建选项卡下,有一个高级按钮,我必须将调试信息设置为“完整”或“仅 pdb”
【讨论】:
以上是关于即使包含 PDB 文件,堆栈跟踪中也缺少行号的主要内容,如果未能解决你的问题,请参考以下文章