एक नोड में 10 से अधिक पंक्तियाँ। Js स्टैक त्रुटि?


93

वहाँ एक नोड में 10 से अधिक लाइनों पाने के लिए एक रास्ता है। जे एस स्टैक त्रुटि?

function a() { dieInHell(); }
function b() { a(); }
function c() { b(); }
function d() { c(); }
function e() { d(); }
function f() { e(); }
function g() { f(); }
function h() { g(); }
function i() { h(); }
function j() { i(); }
function k() { j(); }
function l() { k(); }
function m() { l(); }
function n() { m(); }
function o() { n(); }
function p() { o(); }
function q() { p(); }

try {
    q();
}
catch(e) {
    console.log(e.stack);
}

दिखाता है :

$ node debug.js 
ReferenceError: dieInHell is not defined
    at a (/Users/julien/tmp/debug.js:2:5)
    at b (/Users/julien/tmp/debug.js:6:5)
    at c (/Users/julien/tmp/debug.js:10:5)
    at d (/Users/julien/tmp/debug.js:14:5)
    at e (/Users/julien/tmp/debug.js:18:5)
    at f (/Users/julien/tmp/debug.js:22:5)
    at g (/Users/julien/tmp/debug.js:26:5)
    at h (/Users/julien/tmp/debug.js:30:5)
    at i (/Users/julien/tmp/debug.js:34:5)
    at j (/Users/julien/tmp/debug.js:38:5)

क्या 10 से अधिक कॉल प्राप्त करने का एक तरीका है?


बेहतर डिबगिंग Node.JS के भावी संस्करणों के लिए एक प्राथमिकता है
BRampersad

क्या मैं आपकी टिप्पणी से यह कहता हूं कि यह अभी तक नहीं किया जा सका है?
जूलियन जेनस्टौक्स

नहीं। लेकिन बेहतर डिबगिंग .6 :) की सूची में है
ब्रम्हप्रसाद

जवाबों:


138

इसके लिए सबसे आसान समाधान निम्नलिखित के साथ अपना कोड शुरू करना है:

Error.stackTraceLimit = Infinity;

यदि आप स्टैक ट्रेस देखना चाहते हैं जो सेटटाइमआउट / सेटइंटरवल कॉल पर फैला है, तो अधिक परिष्कृत https://github.com/mattinsler/longjohn जाने का रास्ता होगा।


2
जब मैंने आखिरी बार कोशिश की थी तब Error.stackTraceLimit ने मेरे लिए ऐसा नहीं किया।
बीटी

ध्यान दें कि कुछ पैकेज बदल सकते हैंstackTraceLimit । इसके अलावा, यह केवल उसी चीज को प्रभावित करता है जो आप में मिलता है Error.stackजो मैं देख सकता हूं। अंतर्निहित डिबगर हमेशा पूर्ण स्टैक ( btकमांड) प्रदर्शित करता है ।
x- यूरी

और जाहिरा तौर पर, स्टैक ट्रेस async कार्रवाई का पालन नहीं करता है। दूसरे शब्दों में, अतुल्यकालिक कॉल के कॉलबैक में आपका स्टैक खरोंच से शुरू होता है (यह मूल रूप से खाली है)।
x- यूरी

@ x-yuri Node.js की टीम उस पर काम कर रही है ( github.com/nodejs/node/issues/11865 ) अन्यथा क्रोम डिबगर में पूर्ण स्टैक दिखाई देता है जब आप नोड कमांडरॉन के साथ --inspectया --inpect-brkकमांड चलाते हैं
Mariusz Nowak

ओमग यह मुझे पागल कर रहा था। इस जानकारी के लिए धन्यवाद!
क्रिश ओए

65

आप एक कमांड लाइन के रूप में स्टैक ट्रेस सीमा को पास कर सकते हैं node:

node --stack-trace-limit=1000 debug.js // डिफ़ॉल्ट 10

BTW, एक और चीज जो होने की संभावना नहीं लगती है, लेकिन डिबगिंग के लिए मेरे समय के कुछ घंटों को बर्बाद कर दिया गया है , स्टैक का आकार है (जो 492 kB के लिए चूक है) । यदि स्टैक समाप्त हो जाता है ( RangeErrorबिना किसी अतिरिक्त जानकारी के) तो आपके पास बहुत अधिक असंक्रामक त्रुटियां हो सकती हैं । आप स्टैक का आकार बढ़ा सकते हैं :

node --stack-size=1024 debug.js // डिफ़ॉल्ट 492

कॉलबैक-टू-कॉलबैक-टू-कॉलबैक चेनिंग्स की दुनिया में, बड़े इनपुट आकारों के स्टैक आकार को पार करना वास्तव में बहुत आसान है, अगर प्रोग्राम को ध्यान में नहीं लिखा गया है।

सभी स्टैक-संबंधित विकल्प देखने के लिए:

node --v8-options | grep -B0 -A1 stack


3
--स्टैक-ट्रेस-लिमिट अभी भी 0.10.22 के रूप में काम कर रही है, धन्यवाद!
रिप्लेक्सस

3
Node.js v8.0.0 के रूप में, आप इसे NODE_OPTIONSपर्यावरण चर में भी सेट कर सकते हैं , उदा NODE_OPTIONS='--stack-trace-limit=10000' /path/to/some-script। यदि आप nodeसीधे आह्वान नहीं कर रहे हैं तो उपयोगी है ।
ब्लू सिप


-1

इसके अलावा, आप बिल्ट-इन डीबगर का उपयोग कर सकते हैं , जो परिचित Google Chrome के डेव-टूल्स डीबगर को खोलता है। यह किसी भी त्रुटि पर रुक जाता है और आप पूरे स्टैक को ब्राउज़ कर सकते हैं। बस दौडो:

$ node --inspect debug.js

Debugger listening on port 9229.
To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.