我有一个在我的开发机器上工作正常的Web应用程序,但是当我在另一台机器上安装它时,它只会崩溃我添加到DLL中的一种新方法。
仔细研究一下,安装后不会使用PDB文件,而是在我的开发机器上。所以我试图在dev机器上删除它们,我的新方法崩溃了。其他方法根本不会崩溃。
我的方法只会抛出一个“NullPointerException”,当PDB文件存在时,它永远不会出现。
我知道PDB文件的用途(我在发布之前搜索了这个网站),但这不应该改变应用程序的工作方式。应该吗?
编辑:忘记提及所有内容都在<release>
而非<debug>
。这就是我对PDB文件提出质疑的原因。
答案 0 :(得分: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文件。