Throw 会保留堆栈, Throw ex会清空堆栈,从而找不到在什么地方出错。
记录日志时,使用ex.ToString()得到出错信息, 如果有*.pdb文件则会显示详细的堆栈信息,包括行号等;
如果没有*.pdb文件,则会显示出错信息和调用的相关方法,但是不会显示出错行号信息。
可以用以下代码测试:
class Program { static void Main(string[] args) { Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory); DoException(); Console.ReadLine(); } static void DoException() { try { try { Error(); } catch (Exception ex) { Console.WriteLine("orgin: {0}", ex); throw new Exception("wrap exception", ex); } } catch (Exception eee) { Console.WriteLine("out: {0}", eee); //throw; } } static void Error() { int i = 5; Console.WriteLine(i); throw new Exception("origin exception"); } }