javascript questions जावास्क्रिप्ट में__LINE__ समतुल्य




javascript programs (5)

सी में एक __LINE__ को एक प्रीप्रोसेसर द्वारा विस्तारित किया गया है जो कि वर्तमान इनपुट की लाइन संख्या के साथ प्रतिस्थापित करता है। तो, जब आप देखेंगे

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

संकलक देखता है:

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

असल में संख्या (324 इस मामले में) कार्यक्रम में सशक्त हो गया है। यह केवल यह दो-पास तंत्र है जो यह संभव बनाता है।

मैं नहीं जानता कि PHP कैसे इस प्राप्त करता है (क्या यह भी पूर्वप्रक्रिया है?)।

जावास्क्रिप्ट में स्रोत लाइन नंबर प्राप्त करने का कोई तरीका क्या है, जैसे सी या PHP के लिए __LINE__ ?


एक वैकल्पिक हल है

आमतौर पर __ फ़ाइल __ के साथ मिलकर __ लाइन __ का प्रयोग कोड में किसी स्थान को चिह्नित करने के लिए किया जाता है और उस स्थान को बाद में खोजने के लिए चिन्हांकन किया जाता है।

हालांकि, __ लाइन __ और __ फाइल __ के स्थान पर ग्लोबली यूनिक पहचानकर्ता (GUID-s) का उपयोग करके समान प्रभाव प्राप्त करना संभव है। समाधान का विवरण बीएसडी-लाइसेंस प्राप्त टूलसेट के COMMENTS.txt में रहता है जो प्रक्रिया को स्वचालित करता है।


एक रास्ता है, हालांकि अधिक महंगा है: एक अपवाद फेंक दो, तुरंत इसे पकड़ो, और अपने स्टैक ट्रेस से पहली प्रविष्टि खोदें। ट्रेस को पार्स करने के लिए यहां उदाहरण देखें। समान चाल का उपयोग सादे जावा में भी किया जा सकता है (अगर कोड डीबगिंग सूचना के साथ संकलित किया गया है)।

संपादित करें : जाहिरा तौर पर सभी ब्राउज़र इसका समर्थन नहीं करते हैं अच्छी खबर है (टिप्पणी के लिए धन्यवाद, क्रिस्टोफ!) कि कुछ ब्राउज़र सीधे फ़ाइल नाम और लाइन नंबर के माध्यम से स्रोत ऑब्जेक्ट के स्रोत फ़ाइल नाम और लाइन नंबर निर्यात करते हैं


मुझे लगता है कि प्रीप्रोसेसिंग अधिक समझ में आता है, इसमें कोई रनटाइम ओवरहेड नहीं जोड़ता है सी प्रीप्रोसेसर का विकल्प पर्ल का उपयोग कर रहा है, जैसा कि नीचे 2 चरण प्रक्रिया में है:

1 - स्क्रिप्ट में प्रत्येक पंक्ति में "लाइन # 999 \ n" जोड़ें, जिसे आप गिने चाहते हैं, जैसे,

  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

आप अपनी जावास्क्रिप्ट फाइलों पर सी प्रीप्रोसेसर (जीएनयू कंपाइलर कलेक्शन से फ़े cpp ) को चलाने की कोशिश कर सकते हैं - या तो हर अनुरोध के साथ गतिशील रूप से या स्थिर रूप से, इस ऑपरेशन को हर बार जब आप अपनी जावास्क्रिप्ट फाइलों को बदलते हैं, तो लागू कर सकते हैं। मुझे लगता है कि जावास्क्रिप्ट वाक्यविन्यास इस तरह काम करने के लिए काफी समान है।

उसके बाद आपके पास सी प्रीप्रोसेसर की सभी शक्ति होगी





javascript