8

这让我抓狂。我使用 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 文件手动复制到 temp 文件夹,我可以看到行号。

知道为什么不将 pdb 文件复制到临时文件夹吗?

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

4

5 回答 5

3

我遇到了同样的问题,并在阳光下尝试了所有方法来尝试修复它。直到我在这个类似的问题中找到公认的答案之前,什么都没有起作用: IIS not give line numbers in stack trace even if pdb present

事实证明,使用 web.config 进行模拟:

<identity impersonate="true" />

导致堆栈跟踪中的行号丢失。我取出条目,我的行号返回,放回去几个小时后(Kerberos 票刷新?)行号再次消失。

不知道为什么模拟会影响堆栈跟踪,但它确实 - 很高兴有人确认/解释这一点......

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

于 2010-12-03T16:58:09.227 回答
0

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

于 2010-09-30T05:21:20.793 回答
0

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

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

于 2010-02-05T10:00:49.680 回答
0

也许您要发布到的服务器<deployment retail="true" />在系统machine.config文件中配置了以下设置:

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

有关更多信息,请参阅:

ASP.NET 配置 - 部署元素(ASP.NET 设置架构)

只是一个想法。

于 2010-02-05T05:07:54.697 回答
0

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

于 2010-02-24T10:06:45.287 回答