Exception 的 StackTrace 信息的丢失

原创 2007年09月23日 16:29:00

    今天从CodeGuru上看到了一片文章Throwing Exceptions: Will You be Able to Catch What You Expect?

   做了一个实验,现在贴出程序和运行效果:

实验一: ExeceptionCatch 中的 catch块直接使用throw ex

 

static void Main(string[] args)
        
...{
            
try
            
...{
                ExceptionCatch();
            }

            
catch (Exception ex)
            
...{
                Console.WriteLine(ex.StackTrace);
                Console.ReadLine();
            }

        }


        
public static void ExceptionCatch()
        
...{
            
try
            
...{
                ExceptionThrow();
            }

            
catch (Exception ex)
            
...{
                
throw ex;
            }

        }


        
public static void ExceptionThrow()
        
...{
            
throw new Exception();
        }

运行结果是:

 

   at ExceptionTest.Program.ExceptionCatch() in D:myfileVisual Studio 2005Pro
jectsExceptionTestExceptionTestProgram.cs:line 
30
   at ExceptionTest.Program.Main(String[] args) 
in D:myfileVisual Studio 2005
ProjectsExceptionTestExceptionTestProgram.cs:line 
13

实验二: ExeceptionCatch 中的 catch块直接使用throw

 

static void Main(string[] args)
        
...{
            
try
            
...{
                ExceptionCatch();
            }

            
catch (Exception ex)
            
...{
                Console.WriteLine(ex.StackTrace);
                Console.ReadLine();
            }

        }


        
public static void ExceptionCatch()
        
...{
            
try
            
...{
                ExceptionThrow();
            }

            
catch (Exception)
            
...{
                
throw;
            }

        }


        
public static void ExceptionThrow()
        
...{
            
throw new Exception();
        }

运行结果是:

 

   at ExceptionTest.Program.ExceptionThrow() in D:myfileVisual Studio 2005Pro
jectsExceptionTestExceptionTestProgram.cs:line 
36
   at ExceptionTest.Program.ExceptionCatch() 
in D:myfileVisual Studio 2005Pro
jectsExceptionTestExceptionTestProgram.cs:line 
30
   at ExceptionTest.Program.Main(String[] args) 
in D:myfileVisual Studio 2005
ProjectsExceptionTestExceptionTestProgram.cs:line 
13


 由此可见,如果在使用throw ex的话将会导致一个新的Exception被抛出,使得StackTrace的信息会丢失,这样的话我们获得的异常信息将会是最后一个重新抛出异常的StackTrace信息。如果我们使用的是throw的话,系统将会重新抛出原来的异常,这样的话我们就不会丢失StackTrace信息了。

c# - catch(Exception ex) 会丢掉StackTrace 是怎么回事?

c# catch(Exception ex) 会丢掉StackTrace 是怎么回事?
  • yuxuac
  • yuxuac
  • 2013年10月10日 16:09
  • 6827

得到java异常printStackTrace的详细信息

平时写java代码时,想看抛出的异常信息,来找出具体的异常点,我们常常会用Exception.toString ()或者 Exception.getMessage()来取得异常信息,再把它print到...
  • u010257076
  • u010257076
  • 2013年12月17日 23:10
  • 4524

Unity3D -- 输出堆栈信息(StackTrace)

我们可以通过断点调试查看堆栈信息,也可以直接输出调用的堆栈信息,using System.Collections; using System.Collections.Generic; using Un...
  • honey199396
  • honey199396
  • 2017年12月07日 12:01
  • 220

浅析StackTrace

我们在学习函数调用时,都知道每个函数都拥有自己的栈空间。一个函数被调用时,就创建一个新的栈空间。那么通过函数的嵌套调用最后就形成了一个函数调用堆栈。在c#中,使用StackTrace记录这个堆栈。你可...
  • yaokang522
  • yaokang522
  • 2015年10月22日 16:49
  • 988

使用 StackTrace 获得更多跟 Exception 有关的信息

不知你有没有留意过ASP.net的异常,如下图: 请留意图中用红笔标的地方。那些数字标明出错处位于源代码文件的多少行。 但是,我们通过 Exception.StackTrace 是获得不了这个信息的...
  • ghj1976
  • ghj1976
  • 2008年03月05日 10:16
  • 1814

suppressedExceptions

addSuppressed()方法 开发人员对异常处理的try-catch-finally语句块都比较熟悉。如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中...
  • gxftry1st
  • gxftry1st
  • 2017年03月23日 14:51
  • 437

C#使用StackTrace获取方法被谁调用

在方法中扔进这段 System.Diagnostics.Debug.WriteLine(new string('*', 78)); System.Diagnostics.StackTrace st...
  • dz45693
  • dz45693
  • 2014年12月01日 17:20
  • 3515

NullPointerException丢失异常堆栈信息

在生产环境上看到tomcat/log/catalina.out一直输出异常信息,但是不见异常堆栈信息,如下图所示: 在使用log4j中,调用异常方法exception.getStackTrace(...
  • taotao4
  • taotao4
  • 2015年02月23日 20:52
  • 4312

浅析C++ StackTrace 堆栈轨迹

堆栈轨迹:如果你需要打印出某个时间的调用堆栈状态,你将产生一个堆栈轨迹。 stack trace 中包括三部分,分别为:.bss .text .data bss: 表示程序中未初始化的全局变量的一块内...
  • u011676589
  • u011676589
  • 2013年09月05日 18:03
  • 1671

保存Exception的StackTrace到StringBuffer中

 package exception;import java.io.PrintWriter;import java.io.StringWriter;public class ExceptionPrin...
  • lianghyan
  • lianghyan
  • 2008年07月21日 15:43
  • 450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Exception 的 StackTrace 信息的丢失
举报原因:
原因补充:

(最多只允许输入30个字)