4

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

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

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

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

编辑:忘了说一切都在<release>not <debug>。这就是我质疑 PDB 文件的原因。

4

1 回答 1

3

我发现我的代码出了什么问题。在记录器部分,使用 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 文件。

于 2012-11-05T09:40:24.580 回答