即使包含PDB文件,也会在堆栈跟踪中缺少行号

时间:2010-02-04 23:43:22

标签: .net iis release publish pdb-files

这让我疯了。我使用VS 2008使用C#实现了这个Web服务。我在IIS上发布它。我修改了发布版本,因此将pdb文件与dll一起复制到inetpub上的目标目录中。

web.config文件也有debug = true。

然后我调用一个抛出异常的Web服务。堆栈跟踪不包含行号。我不知道我在这里缺少什么,有什么想法吗?

其他信息: 如果我使用VS内置Web服务器运行Web应用程序,它可以工作,我在堆栈跟踪中获取行号。但是,如果我将VS内置Web服务器使用的相同文件(pdb和dll)复制到IIS,则堆栈跟踪中仍然缺少行号。

似乎有一些与IIS相关的东西忽略了pdb文件!

更新 当我发布到IIS时,所有pdb文件都在bin目录下发布,一切都很好。但是当我转到与我的项目相关的特定目录下的“C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files”时,我可以看到汇编(.dll)文件都在那里,但没有pdb文件。 但是,如果我使用VS内置Web服务器运行项目,则不会发生这种情况。 因此,如果我手动将pdb文件复制到临时文件夹,我可以看到行号。

知道pdb文件没有被复制到临时文件夹的原因吗?

顺便说一句,当我附加到工作进程时,我可以看到它表示已加载符号!

5 个答案:

答案 0 :(得分:3)

我有同样的问题,并尝试在阳光下尝试修复它。在我在这个类似的问题中找到接受的答案之前,没有任何工作:IIS not giving line numbers in stack trace even though pdb present

  

事实证明,使用web.config:

进行模拟
<identity impersonate="true" />
  

会导致堆栈跟踪中丢失行号。我拿出了这个条目,我的行号又回来了,把它放回去几个小时后(Kerberos票刷新了吗?)行号再次消失了。

     

不确定为什么冒充会影响堆栈跟踪,但确实如此 - 很乐意让某人确认/解释这个......

我需要为我的大多数网站启用模拟(并且这些网站有行号,去图)所以我为这个特定的网站禁用了它并获得了我的行号!!

答案 1 :(得分:0)

您发布的服务器可能在系统<deployment retail="true" />文件中配置了machine.config设置:

  

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG

有关详细信息,请参阅:

  

ASP.NET configuration - deployment Element (ASP.NET Settings Schema)

只是一个想法。

答案 2 :(得分:0)

使用VS或windbg附加到工作进程,看看它是否能找到你的pdb以及它是否与你的程序集匹配?

另一个常见原因是您实际上正在使用发布dll [已优化]。我怀疑这与IIS有什么关系。

答案 3 :(得分:0)

请确保在web.config中设置“debug = true”,没有它,例外中不会显示行号。

答案 4 :(得分:0)

不确定这是否有帮助,但在我的VS2008 C#项目属性中,在构建选项卡下,有一个高级按钮,我必须将调试信息设置为“完整”或“仅限pdb”