Recipe 5.12 Getting to the Root of a Problem Quickly
Problem
A thrown and caught exception can
contain one or more inner exceptions. The innermost exception is
usually indicates the origin of the problem. You want to be able to
view the original thrown exception and skip all of the outer
exceptions, and to view the initial problem.
Solution
The GetBaseException
instance method of the Exception class displays
information on only the innermost (original) exception; all other
exception information is not displayed. This method accepts no
parameters and returns the innermost exception. For example:
Console.WriteLine(e.GetBaseException( ).ToString( ));
Discussion
Calling the GetBaseException( ).ToString( ) method
on an exception object that contains an inner exception produces the
same error information as if the ToString method
was called directly on the inner exception. However, if the exception
object does not contain an inner expression, the information of the
provided exception object is displayed. For the following code:
Exception innerInner = new Exception("The innerInner Exception.");
ArgumentException inner = new ArgumentException("The inner Exception.", innerInner);
NullReferenceException se = new NullReferenceException("A Test Message.", inner);
try
{
throw (se);
}
catch(Exception e)
{
Console.WriteLine(e.GetBaseException( ).ToString( ));
}
something similar to this would be displayed:
System.Exception: The innerInner Exception.
at Chapter_Code.EH.MyMethod( ) in c:\book cs cookbook\code\test.cs:line 286
Notice that no exception other than the innerInner
exception is displayed. This useful technique gets to the root of the
problem while filtering out all of the other outer exceptions that
you are not interested in.
See Also
See the "Error Raising and Handling
Guidelines" and "Exception
Class" topics in the MSDN documentation.
|