Skip to content Skip to sidebar Skip to footer

__LINE__ Equivalent In Javascript

Is there any way to get the source line number in Javascript, like __LINE__ for C or PHP?

Solution 1:

There is a way, although more expensive: throw an exception, catch it immediately, and dig out the first entry from its stack trace. See example here on how to parse the trace. The same trick can also be used in plain Java (if the code is compiled with debugging information turned on).

Edit: Apparently not all browsers support this. The good news is (thanks for the comment, Christoph!) that some browsers export source file name and line number directly through the fileName and lineNumber properties of the error object.


Solution 2:

The short answer is no.

The long answer is that depending on your browser you might be able to throw & catch an exception and pull out a stack trace.

I suspect you're using this for debugging (I hope so, anyway!) so your best bet would be to use Firebug. This will give you a console object; you can call console.trace() at any point to see what your programme is doing without breaking execution.


Solution 3:

A __LINE__ in C is expanded by a preprocessor which literally replaces it with the line number of the current input. So, when you see

printf("Line Number: %d\r\n", __LINE__);

the compiler sees:

printf("Line Number: %d\r\n", 324);

In effect the number (324 in this case) is HARDCODED into the program. It is only this two-pass mechanism that makes this possible.

I do not know how PHP achieves this (is it preprocessed also?).


Solution 4:

You can try to run C preprocessor (f.e. cpp from GNU Compiler Collection) on your javascript files -- either dynamically with each request or statically, by making this operation be applied every time you change your javascript files. I think the javascript syntax is similar enough for this to work.

Then you'd have all the power of C preprocessor.


Solution 5:

I think preprocessing makes more sense, in that it adds no runtime overhead. An alternative to the C preprocessor is using perl, as in the 2 step procedure below:

1 – add “Line # 999 \n” to each line in the script that you want numbered, e.g.,

  alert ( "Line # 999 \n"+request.responseText);

2 – run the perl below:

cat my_js.js | perl -ane "{ s/Line # \d+ /Line # $. /; print $_;}" > C_my_js.js; mv  C_my_js.js  my_js.js

Post a Comment for "__LINE__ Equivalent In Javascript"