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信息了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Working with Delphi’s new Exception.StackTrace

One feature I often miss when using Delphi is the support for proper exception stack traces at run-t...

线程运行栈StackTrace用法,代码调用树查看,出错代码位置信息提示,代码所在类名包名文件名查看

线程运行栈StackTrace用法,代码调用树查看,出错代码位置信息提示,代码所在类名包名文件名查看

Myeclipse中出现"A Java Exception has occurred"的弹出提示信息解决方案

在MyEclipse中连接Neo4j时,需要导入大量的Neo4j的jar包,在运行时总是出现“A Java Exception has occurred”的Dialog,在Console控制台上出现“...

android-ndk-stacktrace-analyzer

http://code.google.com/p/android-ndk-stacktrace-analyzer/wiki/Usage Usage   How to use...

Android studio 1.0.1中Run with --stacktrace option to get the stack trace. Run with --info or --debug

提示信息 Run with --stacktrace option to get the stack trace. Run with --info or --debug option t...

JVM 看不到某些异常的stacktrace问题

今天又有同事问起这个事情,所以写个blog记录一下。      在java 1.5的release notes里面可以看到这样一句话:     The compiler in the server V...

Error Error initializing classpath: Connection timed out: connect (Use --stacktrace to see the full

参考文章:http://cache.baiducontent.com/c?m=9d78d513d99007b8589cc93e5801d6160e54f7743da785552c82cd1f84652...

浅析StackTrace

浅析StackTrace        我们在学习函数调用时,都知道每个函数都拥有自己的栈空间。一个函数被调用时,就创建一个新的栈空间。那么通过函数的嵌套调用最后就形成了一个函数调用堆栈。在...

Fundebug支持通过Source Map还原错误栈(stacktrace)

Fundebug支持通过Source Map还原错误栈(stacktrace)Fundebug支持使用Source Map还原真正的错误位置。这样的话,开发者能够迅速定位出错的源代码。另外,Funde...

android Kernel Exception

  • 2017-08-20 21:05
  • 484KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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