有什麼辦法可以在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. Winsock.SendData等效於Javascript?
- 4. ArrayList.ensureCapacity等效於Javascript
- 5. Javascript Deflater等效於Javascript
- 6. 等效於javascript中的browserField.displayContent()
- 7. PHP的strstr()等效於JavaScript
- 8. PHP STRCHR等效於JavaScript
- 9. Click元素等效於javascript
- 10. ColdFusion JavaScript等效於#encodeForJavaScript()#
- 11. Javascript等效於vbscript setlocale
- 12. Javascript等效於visual foxpro gomonth()
- 13. JavaScript等效於C#的Char.IsSymbol
- 14. Haskell相當於C的__LINE__
- 15. addslashes JavaScript等效
- 16. javascript「ctrl +」等效
- 17. JavaScript字符串替換等效於PHP?
- 18. JavaScript等效於vbscript Now and Time()
- 19. 用於Java Streams API的Javascript等效
- 20. 等效於JavaScript的Java的的getBytes的
- 21. Python的目錄等效於Javascript
- 22. 什麼是setTimeOut()的JavaScript等效於Android?
- 23. javascript等效於python ctypes與node-gyp
- 24. javascript等效於'mouseleave'的觸摸互動
- 25. WriteableBitmap等效於Windows庫的Javascript
- 26. JavaScript等效於Java的URLEncoder.encode(「String」,「UTF-8」)
- 27. 適用於PHP的JavaScript等效RegExp
- 28. Javascript的SetTimeout,SetInterval和ClearInterval等效於c#
- 29. 等效於WM_MOVE
- 30. Pure JavaScript Graphviz等效
瀏覽器添加了一個堆棧跟蹤錯誤對象可能也直接暴露了`lineNumber`財產 - 不需要解析那裏... – Christoph 2009-01-18 10:49:54