Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get error line number of code using try-catch

Tags:

c#

exception

I want to get line number of code which cause error. For example;

static void Main(string[] args) {     using (SqlConnection conn = new SqlConnection(bagcum))     {         SqlCommand cmd = conn.CreateCommand();         cmd.CommandText = "DONTINSERT into GIVEMEERROR(CamNo,Statu) values (" + 23 + "," + 0 + ")";         conn.Open();         int n = cmd.ExecuteNonQuery();     } } 

so As we know that code doesn't work, it will throw exception Line number of code which is:

int n = cmd.ExecuteNonQuery(); 

So how can get that line number of using try-catch? I tried using a StackTrace class but it gives line number as 0:

static void Main(string[] args) {     try     {         using (SqlConnection conn = new SqlConnection(bagcum))         {             SqlCommand cmd = conn.CreateCommand();             cmd.CommandText = "DONTINSERT into GIVEMEERROR(CamNo,Statu) values (" + 23 + "," + 0 + ")";             conn.Open();             int n = cmd.ExecuteNonQuery();         }             }     catch (Exception ex)     {         System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);                     Console.WriteLine("Line: " + trace.GetFrame(0).GetFileLineNumber());     } } 

OUTPUT:

Line:0 

Update:
Usually error line of code is 22 so I have to get that number.

Thanks

like image 460
Mustafa Ekici Avatar asked Dec 01 '11 08:12

Mustafa Ekici


People also ask

How can I get the line number which threw exception?

Simple way, use the Exception. ToString() function, it will return the line after the exception description. You can also check the program debug database as it contains debug info/logs about the whole application.

How can I get line number in stack trace?

The java. lang. StackTraceElement. getLineNumber() method returns the line number of the source line containing the execution point represented by this stack trace element.

How do you use try catch error?

Throw, and Try...Catch... The try statement defines a code block to run (to try). The catch statement defines a code block to handle any error. The finally statement defines a code block to run regardless of the result. The throw statement defines a custom error.


1 Answers

Try this simple hack instead:

First Add this (extension) class to your namespace(most be toplevel class):

public static class ExceptionHelper {     public static int LineNumber(this Exception e)     {          int linenum = 0;         try         {             //linenum = Convert.ToInt32(e.StackTrace.Substring(e.StackTrace.LastIndexOf(":line") + 5));              //For Localized Visual Studio ... In other languages stack trace  doesn't end with ":Line 12"             linenum = Convert.ToInt32(e.StackTrace.Substring(e.StackTrace.LastIndexOf(' ')));          }           catch         {             //Stack trace is not available!         }         return linenum;     } } 

And its done!Use LineNumber method whenever you need it:

try { //Do your code here } catch (Exception e) { int linenum = e.LineNumber(); } 
like image 120
pingsft Avatar answered Sep 30 '22 17:09

pingsft