'Return the Method Name and Line Number upon Error in page in global.asax file
My code is as below , would like to get Page Name , Method Name and Page Line Number where error occured.
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
if (HttpContext.Current.Server.GetLastError() != null)
{
Exception ex = HttpContext.Current.Server.GetLastError().GetBaseException();
string urlPath = Request.Url.ToString();
string errorMsg = ex.Message;
// Need help on below .....
string pageName = ??????
string pageMethodName = ??????
string pageLineNumber = ??????
}
}
The ex.StackTrace Property works when I user it with try/catch in the page.
private void sampletTest()
{
try
{
//throwing Exception
using (SqlConnection connection = new SqlConnection(""))
{
connection.Open();
}
}
catch (Exception exception)
{
//Get a StackTrace object for the exception
StackTrace st = new StackTrace(exception, true);
//Get the first stack frame
StackFrame frame = st.GetFrame(st.FrameCount - 1);
//Get the file name
string fileName = frame.GetFileName(); //returns filename
//Get the method name
string methodName = frame.GetMethod().Name; // returns methodname
//Get the line number from the stack frame
int line = frame.GetFileLineNumber(); //returns line number
}
}
The above code return the line number , method name and page name as expected.
The below code when used in global.asax , doesn't return line number , methodname
if (HttpContext.Current.Server.GetLastError() != null)
{
Exception myException =
HttpContext.Current.Server.GetLastError().GetBaseException();
StackTrace st = new StackTrace(myException, true);
//Get the first stack frame
StackFrame frame = st.GetFrame(st.FrameCount - 1);
//Get the file name
string fileName = frame.GetFileName(); //returns null
//Get the method name
string methodName = frame.GetMethod().Name; //returns *"ProcessRequestMain"*
//Get the line number from the stack frame
int line = frame.GetFileLineNumber(); //returns 0
}
Solution 1:[1]
It worked for me this way (GetMethod and GetFileNumber methods were not working):
Dim ex As Exception = Server.GetLastError.GetBaseException
Dim trace As New Diagnostics.StackTrace(ex, True)
In trace you have the method and the line, so you can easily print
trace.toString()
Solution 2:[2]
this is how i solved:
Dim ex As Exception = Server.GetLastError()
Dim StackTraces As New Diagnostics.StackTrace(ex.InnerException, True)
Dim StackFrame = Nothing
For Each StackFrame In StackTraces.GetFrames()
If (StackFrame.GetFileColumnNumber() > 0) Then
Exit For
End If
Next
i get the correct exception by the stack of the inner exception
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 |