【问题标题】:My website crashes without the PDB files我的网站在没有 PDB 文件的情况下崩溃
【发布时间】:2012-10-31 16:29:45
【问题描述】:

我有一个 Web 应用程序可以在我的开发机器上正常运行,但是当我将它安装到另一台机器上时,它只是在我添加到 DLL 中的一种新方法上崩溃。

更深入地研究它,当它们在我的开发机器上时,安装程​​序不会获取 PDB 文件。所以我试图在开发机器上删除它们,我的新方法同样崩溃。其他方法根本不会崩溃。

我的方法只是抛出一个“NullPointerException”,当 PDB 文件存在时,它永远不会出现。

我知道 PDB 文件的用途(我在发布之前搜索了这个网站),但这不应该改变应用程序的工作方式。应该吗?

编辑:忘了说所有都在<release> 而不是<debug>。这就是我质疑 PDB 文件的原因。

【问题讨论】:

  • 您正在运行二进制文件的发行版吗?我认为运行调试分发不需要 PDB 文件,但这是一个想法。您的 web.config 文件是否也设置为允许调试?如果你打开了堆栈跟踪支持,我想知道 IIS 是否需要 PDB。
  • 环境之间可能存在更多差异 - 是什么让您认为这是由于缺少 PDB 造成的?如果您删除开发机器上的 PDB,它会崩溃吗?如果将 PDB 放在有问题的机器上,它不会崩溃吗?
  • 留在开发机器上,我的 IIS 指向我的工作文件夹。所以我将文件夹复制到开发机器上的不同位置,在 IIS 中进行设置。工作正常,然后我删除 PDB 文件并在 web.config 中设置 并在新方法上崩溃。
  • NullPointerException 不是 .NET/IIS 原生的。您必须收集崩溃堆栈跟踪。我怀疑您的代码库确实要求在后台提供 PDB 文件,因此您必须仔细调试。其他人提到的常识可能不适用于您的案例。

标签: c# asp.net iis-7 iis-6


【解决方案1】:

我发现我的代码出了什么问题。 在记录器部分,使用 log4Net,我有这样的代码:

public static void Info(string strMsg)
{
    StackTrace st = new StackTrace(true);
    StackFrame sf = st.GetFrame(1);
    _log.Info(string.Format("{0,-25} L{1:0000} {2}", sf.GetFileName().Substring(sf.GetFileName().LastIndexOf(@"\") + 1), sf.GetFileLineNumber(), strMsg));
}

所以我将条目更改为如下内容:

public static void Debug(string strMsg)
{
    StackTrace st = new StackTrace(true);
#if DEBUG
    StackFrame sf = st.GetFrame(1);
    _log.Debug(string.Format("{0,-25} L{1:0000} {2}", sf.GetFileName().Substring(sf.GetFileName().LastIndexOf(@"\") + 1), sf.GetFileLineNumber(), strMsg));
#else
    _log.Debug(string.Format("{0}",strMsg));
#endif            
}

现在没有 PDB 文件一切正常。 因此,从堆栈跟踪中提取信息需要 PDB 文件。

【讨论】:

  • 您最好查看 System.Runtime.CompilerServices.CallerMemberNameAttribute 和其他 Caller* 属性。获取堆栈跟踪是非常耗时的操作,应在正常的应用程序工作流程中避免。
  • 感谢@NikolaRadosavljević 的建议,我会检查下一步。事实上,代码就在我之前。使用 System.Runtime.CompilerServices.CallerMemberNameAttribute 会返回与 StackTrace 相同的结果,但不需要 PDB 文件吗?
  • 我检查了 CompilerServices,CallerMemberNameAttribute 是 .Net4.5,而我的代码是 .Net3.5,我无法按照自己的意愿进行升级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2016-03-19
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多