【问题标题】:IIS not giving line numbers in stack trace even though pdb present即使 pdb 存在,IIS 也没有在堆栈跟踪中给出行号
【发布时间】:2010-04-20 08:26:21
【问题描述】:

Web 配置具有 debug=true 并且项目是调试版本并且 pdb 文件存在于 bin 目录中,但是当引发异常时,我没有在堆栈跟踪中获得行号。

适用于本地 IIS/Cassini,但不适用于我们的测试 IIS 服务器。是否有一些我可能遗漏的明显设置?

【问题讨论】:

    标签: c# iis stack-trace


    【解决方案1】:

    结果证明是在 web.config 中使用模拟:

    <identity impersonate="true" />
    

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

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

    【讨论】:

    • 其他人在该线程的第二篇文章中注意到了它,但没有给出解释:channel9.msdn.com/forums/TechOff/…
    • 谢谢格雷姆,谢谢,谢谢,谢谢。我花了 8 多个小时试图解决同样的问题,在尝试了我能想到的一切和我想不到的一切之后,这就是解决方案。我的一些网站需要模拟,但这些网站有行号。由于未知原因,这个特定的网站没有行号,在本地 web.config 中关闭模拟它解决了这个问题。谢谢!!!
    • 刚刚遇到了同样的问题。我猜发生的情况是,当加载 DLL 时,线程作为标准 ASP.Net 身份运行,但是当发生异常并且它想要生成堆栈跟踪时,线程作为没有的调用用户运行有权读取 PDB 文件。我们的应用程序需要 impersonate=true 才能工作,但我们通过允许每个人完全控制对 PDB 文件的访问来解决这个问题。
    • 根据 MSDN:“模拟会显着影响性能和扩展。” See ASP.NET Impersonation。所以不幸的是有一个缺点..
    【解决方案2】:

    根据question 4130956: 如果 impersonate="true",要获取堆栈跟踪中的行号,您需要将“调试程序”用户权限分配给您用于登录的帐户。

    【讨论】:

      【解决方案3】:

      检查 MAchine.Config 文件

      在 ASP.NET 2.0 中有一个可以在 machine.config 中打开的开关,它关闭所有 debug=true,因此在 2.0 应用程序中,您可以直接执行此操作,而无需担心找出哪些应用程序可以执行和不执行拥有它。

      <system.web>
      
            <deployment retail=”true”/>
      
      </system.web>
      

      来源http://blogs.msdn.com/tess/archive/2006/04/13/575364.aspx

      【讨论】:

      • 我在本地机器上试过这个,它实际上完全关闭了跟踪——只返回异常文本。默认情况下,我得到了跟踪,只是没有文件名和行号。
      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 2010-11-22
      • 2018-12-03
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多