questions - javascript programs




जावास्क्रिप्ट में__LINE__ समतुल्य (4)

संक्षिप्त उत्तर नहीं है

लंबे उत्तर यह है कि आपके ब्राउज़र के आधार पर आप एक अपवाद को फेंक कर पकड़ सकते हैं और एक स्टैक ट्रेस खींच सकते हैं।

मुझे संदेह है कि आप इसका उपयोग डीबगिंग के लिए कर रहे हैं (मुझे आशा है कि, वैसे भी!) ताकि आपकी सबसे अच्छी शर्त फ़ायरबग का उपयोग करने के लिए होगी। यह आपको console ऑब्जेक्ट देगा; आप console.trace() को किसी भी बिंदु पर देख सकते हैं कि आपका प्रोग्राम निष्पादन को तोड़ने के बिना क्या कर रहा है।

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


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

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


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

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

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

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

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

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


मुझे लगता है कि प्रीप्रोसेसिंग अधिक समझ में आता है, इसमें कोई रनटाइम ओवरहेड नहीं जोड़ता है सी प्रीप्रोसेसर का विकल्प पर्ल का उपयोग कर रहा है, जैसा कि नीचे 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





javascript