有什么办法可以在Javascript中获得源代码行号,例如C或PHP的__LINE__
?__LINE__等效于Javascript
回答
有一种方法,虽然比较昂贵:抛出一个异常,立即捕获它,并从堆栈跟踪中挖出第一个条目。有关如何解析跟踪的示例here。普通Java也可以使用相同的技巧(如果代码是在打开调试信息的情况下编译的话)。
编辑:显然不是所有的浏览器都支持这个。好消息是(感谢评论Christoph!),一些浏览器输出源文件名和行号directly through the fileName
and lineNumber
properties of the error object。
有一种解决方法。
通常将__ LINE __与__ FILE __结合用于在代码中标记位置,并且稍后将标记完成以找到该位置。
但是,通过使用全局唯一标识符(GUID-s)而不是__ LINE __和__ FILE __可以实现相同的效果。该解决方案的详细信息位于BSD许可工具集的COMMENTS.txt中,可自动执行此过程。
我不明白......你能解释一下吗? – Jason 2012-06-21 03:34:18
A中的__LINE__
扩展了preprocessor,它将字面上用当前输入的行号替换。所以,当你看到
printf("Line Number: %d\r\n", __LINE__);
编译器看到:
printf("Line Number: %d\r\n", 324);
实际上数(324在这种情况下)是硬编码到程序中。这只是这个双通机制,使这成为可能。
我不知道PHP如何实现这一点(它是否预处理?)。
是的,PHP是预处理的。事实上,这是一个递归的缩写:PHP - > PHP:超文本预处理器。尽管首字母缩写最初是用于*个人主页*。 – alex 2010-02-19 05:53:30
您可以尝试在JavaScript文件上运行C预处理程序(f.e. cpp
,来自GNU Compiler Collection) - 通过每次请求动态地或静态地运行,每次更改JavaScript文件时都会应用此操作。我认为javascript语法足够类似于这个工作。
然后你会拥有C预处理器的所有能力。
我认为预处理更有意义,因为它不会增加运行时开销。 C预处理器的一个替代方法是使用perl,如下面的2个步骤所示:
1 - 将“999#行”添加到脚本中需要编号的每一行,例如,,
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
- 1. bash中`__FILE__`,`__LINE__`的等效
- 2. __LINE__等价于Linux shell
- 3. gluProject等效于Javascript
- 4. ArrayList.ensureCapacity等效于Javascript
- 5. Winsock.SendData等效于Javascript?
- 6. Javascript Deflater等效于Javascript
- 7. Javascript等效于visual foxpro gomonth()
- 8. 等效于javascript中的browserField.displayContent()
- 9. seek()等效于javascript/node.js?
- 10. Javascript等效于vbscript setlocale
- 11. Javascript等效于StringEscapeUtils.escape java
- 12. JavaScript等效于C#的Char.IsSymbol
- 13. ColdFusion JavaScript等效于#encodeForJavaScript()#
- 14. PHP STRCHR等效于JavaScript
- 15. ENV变量等效于Javascript
- 16. PHP的strstr()等效于JavaScript
- 17. Click元素等效于javascript
- 18. Haskell相当于C的__LINE__
- 19. addslashes JavaScript等效
- 20. javascript“ctrl +”等效
- 21. Go lang等效于JavaScript的charCode()方法
- 22. 等效于PHP的list()的JavaScript构造?
- 23. 等效于JavaScript的Java的的getBytes的
- 24. JavaScript等效于vbscript Now and Time()
- 25. Javascript的SetTimeout,SetInterval和ClearInterval等效于c#
- 26. javascript等效于'mouseleave'的触摸互动
- 27. PHP等效于Javascript“with”范围声明
- 28. 什么是setTimeOut()的JavaScript等效于Android?
- 29. WriteableBitmap等效于Windows库的Javascript
- 30. Python的目录等效于Javascript
浏览器添加了一个堆栈跟踪错误对象可能也直接暴露了`lineNumber`财产 - 不需要解析那里... – Christoph 2009-01-18 10:49:54