我有一个在.Net 3.0 VS2008中写入的数据迁移应用程序。
我已部署在调试模式下并复制了PDB 文件到我想要运行的服务器。
我收到例外但没有行号。
这是我显示异常的方式
为什么没有异常的行号???
马尔科姆
string msg = string.Format("{0} {1} {2}",ex.Message,ex.StackTrace.ToString(),ex.Source.ToString());
if(ex.InnerException != null)
msg += string.Format(" {0}", ex.InnerException.ToString());
return msg;
答案 0 :(得分:10)
如果你没有得到行号,那么
a) .NET运行时确定.pdb与程序集不匹配(过期,使用优化编译等)
或
b)程序集从一个与包含.pdb的目录不同的目录运行(Windows服务,例如,在%WINDOWS%\ System32下运行)
这听起来不像第一种可能性适用于您,这是Windows服务还是正在更改执行目录?
在任何情况下,您都应该能够使用AppDomain.CurrentDomain.BaseDirectory
属性来确定将搜索程序集和.pdb的位置(默认情况下,这可以被覆盖但如果它被更改则应该是一个很好的指示器)
答案 1 :(得分:1)
不要乱用异常字符串...试着把它弄好,只需要ex.toString()就可以让堆栈放松并打印你想要的信息
当然pdb文件需要用于调试信息。但是格式化异常是完全没必要的,只需调用ex.toString()并为它格式化它。