একটি নোড.জেএস স্ট্যাক ত্রুটিতে 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.