একটি নোড.জেএস স্ট্যাক ত্রুটিতে 10 টিরও বেশি লাইন?


95

নোড.জেএস স্ট্যাক ত্রুটিতে 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 টিরও বেশি কল পাওয়ার কী উপায় আছে?


নোড.জেএস এর ভবিষ্যত সংস্করণগুলির জন্য ভাল ডিবাগিং একটি অগ্রাধিকার
— ব্রাম্পারসাদ

আমি কি আপনার মন্তব্য থেকে গ্রহণ করি যে এটি এখনও করা যায় না?
— জুলিয়েন জেনেসটক্স

নাহ। তবে ভাল ডিবাগিং .6 :) এর তালিকায় রয়েছে
— ব্রাম্পারসাদ

উত্তর:


144

নিম্নলিখিতটির সাথে আপনার কোডটি শুরু করা তার পক্ষে সবচেয়ে সহজ সমাধান:

Error.stackTraceLimit = Infinity;

আপনি যদি সেটটাইমআউট / সেটইন্টারওয়াল কলগুলিতে ছড়িয়ে থাকা স্ট্যাক ট্রেস দেখতে চান তবে আরও পরিশীলিত https://github.com/mattinsler/longjohn যাওয়ার উপায় হবে।


4
আমি যখন সর্বশেষ চেষ্টা করেছি ত্রুটি.স্ট্যাকট্রেস লিমিট এটি আমার জন্য করেনি।
— বিটি

নোট করুন যে কিছু প্যাকেজ পরিবর্তন হতে পারে stackTraceLimit। এছাড়াও, Error.stackআমি যা দেখতে পাচ্ছি তার থেকে এটি কেবল আপনি যা পেয়েছেন তা প্রভাবিত করে । অন্তর্নির্মিত ডিবাগার সর্বদা পূর্ণ স্ট্যাক ( btকমান্ড) প্রদর্শন করে ।
— এক্স-ইউরি

এবং স্পষ্টতই, স্ট্যাক ট্রেস অ্যাসিঙ্ক অপারেশনগুলি অনুসরণ করে না। অন্য কথায়, একটি অ্যাসিঙ্ক্রোনাস কলের কলব্যাকে আপনার স্ট্যাকটি স্ক্র্যাচ থেকে শুরু হয় (এটি মূলত খালি)।
— এক্স-ইয়ুরি

@ x-yuri নোড.জেএস টিম এতে কাজ করছে ( github.com/nodejs/node/issues/11865 ) অন্যথায় আপনি নোড অ্যাপ্লিকেশন --inspectবা --inpect-brkকমান্ডের সাহায্যে ক্রোম ডিবাগারে সম্পূর্ণ স্ট্যাকটি দৃশ্যমান হয়
— নওক

ওমজ আমাকে পাগল করে দিচ্ছিল। এই তথ্যের জন্য ধন্যবাদ!
— ক্রিস ওয়ে

65

আপনি কমান্ড লাইন প্যারাম হিসাবে স্ট্যাক ট্রেস সীমাটি এখানে পাস করতে পারেন node:

node --stack-trace-limit=1000 debug.js // ডিফল্ট 10

বিটিডাব্লু, অন্য একটি জিনিস যা ঘটতে অসম্ভব বলে মনে হচ্ছে, তবে আমার ডিবাগিংয়ের জন্য আমার কয়েক ঘন্টা নষ্ট করা, এটি স্ট্যাকের আকার (যা 492 কেবি ডিফল্ট হয়) । স্ট্যাকটি নিঃশেষ হয়ে গেলে ( RangeErrorকোনও অতিরিক্ত তথ্য ছাড়াই) আপনার খুব তথ্যহীন ত্রুটি থাকতে পারে । আপনি এর সাথে স্ট্যাকের আকার বাড়াতে পারেন :

node --stack-size=1024 debug.js // ডিফল্ট 492

কলব্যাক-থেকে-কলব্যাক-টু-কলব্যাক চেইনিংয়ের জগতে, প্রোগ্রামটি যদি এইভাবে না লেখা থাকে তবে বড় ইনপুট আকারের জন্য স্ট্যাকের আকারটি অতিক্রম করা খুব সহজ।

সমস্ত স্ট্যাক-সম্পর্কিত বিকল্পগুলি দেখতে:

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


4
- স্ট্যাক-ট্রেস-সীমা এখনও 0.10.22 হিসাবে কাজ করছে, ধন্যবাদ!
— রিপ্লেক্সাস

4
নোড.জেএস ভি ৮.০.০ হিসাবে আপনি এটিকে NODE_OPTIONSপরিবেশ পরিবর্তনশীলতেও সেট করতে পারেন , যেমন NODE_OPTIONS='--stack-trace-limit=10000' /path/to/some-script। আপনি nodeসরাসরি চালাচ্ছেন না যদি দরকারী ।
— ব্লু


-1

এছাড়াও আপনি অন্তর্নির্মিত ডিবাগারটি ব্যবহার করতে পারেন , যা গুগল ক্রোমের ডেভ-টুলস ডিবাগারকে পরিচিত করে। এটি কোনও ত্রুটি বন্ধ হয়ে যায় এবং আপনি পুরো স্ট্যাকটি ব্রাউজ করতে পারেন। শুধু রান:

$ node --inspect debug.js

Debugger listening on port 9229.
To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.