ম্যাক-এ একটি Node.js প্রোগ্রাম ডিবাগ করার সময় কমান্ড-লাইন আর্গুমেন্ট পাস করতে, এর VS Code লঞ্চ কনফিগারেশনে একটি args অ্যারে যোগ করুন। প্রতিটি আর্গুমেন্টকে নিজস্ব স্ট্রিংয়ে রাখুন, তারপর F5 চেপে সেই কনফিগারেশনটি শুরু করুন। এটি সরাসরি প্রোগ্রামে মানগুলো পাস করে; এটি zsh-কে অ্যারেটিকে একটি শেল কমান্ড হিসেবে ব্যাখ্যা করতে বাধ্য করে না।
launch.json-এ একটি args অ্যারে যোগ করুন
প্রজেক্ট ফোল্ডারটি VS Code-এ খুলুন। যদি এটিতে ইতিমধ্যে কোনো লঞ্চ কনফিগারেশন না থাকে, তবে ⇧⌘D চেপে Run and Debug খুলুন, create a launch.json file বেছে নিন এবং আপনার রানটাইমের জন্য ডিবাগার নির্বাচন করুন। VS Code একটি ওয়ার্কস্পেস কনফিগারেশন .vscode/launch.json-এ সংরক্ষণ করে। একটি launch রিকোয়েস্ট একটি নতুন প্রসেস শুরু করে; একটি attach রিকোয়েস্ট ইতিমধ্যে চলমান কোনো প্রসেসের সাথে সংযুক্ত হয়, তাই VS Code যখন আপনার আর্গুমেন্টসহ প্রোগ্রামটি শুরু করবে, তখন launch ব্যবহার করুন। Configure debugging in Visual Studio Code
এই সুনির্দিষ্ট উদাহরণের জন্য, ধরে নিন ওয়ার্কস্পেসে app.js রয়েছে এবং আপনি এটি --input এর সাথে একটি ফাইল পাথ (যাতে স্পেস থাকতে পারে) এবং একটি --verbose ফ্ল্যাগ দিয়ে চালাতে চান। configurations অ্যারের ভিতরে এই কনফিগারেশনটি যোগ করুন বা মানিয়ে নিন:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug app with input file",
"program": "${workspaceFolder}/app.js",
"cwd": "${workspaceFolder}",
"args": [
"--input",
"${workspaceFolder}/data files/input.txt",
"--verbose"
]
}
]
}
Run and Debug কনফিগারেশন সিলেক্টরে Debug app with input file বেছে নিন, তারপর F5 চাপুন। program জাভাস্ক্রিপ্ট এন্ট্রি পয়েন্ট শনাক্ত করে, cwd ওয়ার্কিং ডিরেক্টরি সেট করে এবং args অতিরিক্ত কমান্ড-লাইন মান সরবরাহ করে। ডিবাগার এক্সটেনশন প্রতিটি রানটাইমের জন্য সমর্থিত প্রপার্টি নির্ধারণ করে; আপনি যদি অন্য ডিবাগার ব্যবহার করেন বা কোনো ভ্যালিডেশন ত্রুটি দেখতে পান তবে launch.json-এ IntelliSense চেক করুন। Configure debugging in Visual Studio Code
স্পেস এবং বিশেষ অক্ষর অক্ষত রাখুন
অ্যারে-মানযুক্ত args-এ, প্রতিটি উপাদান হলো একটি আর্গুমেন্ট। VS Code উল্লেখ করে যে স্পেস সম্বলিত একটি পাথ ভেরিয়েবল প্রতিস্থাপনের পরেও একটি একক স্ট্রিং হিসেবেই থাকে। অতএব, উদাহরণের ফাইল পাথটি একটি একক আর্গুমেন্ট; কেবল স্পেস বজায় রাখার জন্য এর চারপাশে অতিরিক্ত এস্কেপ করা উদ্ধৃতি চিহ্ন যোগ করবেন না। ${workspaceFolder} VS Code-এ খোলা ফোল্ডার হিসেবে সমাধান (resolve) হয়, যা পাথটিকে প্রজেক্টের সাথে যুক্ত রাখে। Variables reference
টার্মিনালে কমান্ড টাইপ করার চেয়ে এটি ভিন্ন। macOS টার্মিনালের ডিফল্ট শেল হিসেবে zsh ব্যবহার করে, কিন্তু লঞ্চ কনফিগারেশনের args অ্যারে লক্ষ্য প্রসেসের আর্গুমেন্টগুলোকে উপস্থাপন করে। *, >, বা |-এর মতো শেল সিনট্যাক্স সেখানে স্বয়ংক্রিয়ভাবে প্রসারিত (expanded) বা কার্যকর হয় না। উদাহরণস্বরূপ, যদি আপনার প্রোগ্রাম আক্ষরিক মান a&b.txt প্রত্যাশা করে, তবে এটিকে একটি একক JSON স্ট্রিং হিসেবে লিখুন: "a&b.txt"। শেল এক্সপ্যানশন বা রিডাইরেকশনের জন্য, টার্গেটটিকে স্পষ্টভাবে একটি শেলের মাধ্যমে চালাতে হবে, এবং এর সঠিক আচরণ ডিবাগার এক্সটেনশনের ওপর নির্ভর করে; VS Code উল্লেখ করে যে সমস্ত ডিবাগ কনফিগারেশনের জন্য কোনো সর্বজনীন রিডাইরেকশন সিনট্যাক্স নেই। Apple: Change the default shell in Terminal on Mac এবং Configure debugging in Visual Studio Code
প্রোগ্রামটি কী গ্রহণ করছে তা নিশ্চিত করুন
Node.js-এর ক্ষেত্রে, প্রসেসটি process.argv-এর মাধ্যমে লঞ্চ আর্গুমেন্টগুলো প্রদর্শন করে। প্রথম এন্ট্রিগুলো Node এক্সিকিউটেবল এবং স্ক্রিপ্ট পাথকে উপস্থাপন করে; বাকি এন্ট্রিগুলো হলো অতিরিক্ত মান। এগুলো সাময়িকভাবে পরীক্ষা করতে, app.js-এ এটি যোগ করুন:
console.log(process.argv);
উদাহরণ কনফিগারেশনের সাথে, আউটপুটে আলাদা এন্ট্রি হিসেবে --input, data files/input.txt দিয়ে শেষ হওয়া সমাধানকৃত পাথ এবং --verbose অন্তর্ভুক্ত থাকা উচিত। সমস্যাটি VS Code-এর কনফিগারেশনে নাকি প্রোগ্রামের আর্গুমেন্ট পার্সিংয়ে রয়েছে তা জানার এটি একটি ব্যবহারিক উপায়। মানগুলো নিশ্চিত করার পরে ডায়াগনস্টিক আউটপুটটি সরিয়ে ফেলুন বা মানিয়ে নিন। Node.js: Process
প্রতিবার ডিবাগ করার সময় একটি মান জানতে চান
যদি প্রতিটি রানের মধ্যে মান পরিবর্তিত হয়, তবে VS Code launch.json-এ promptString ইনপুট ভেরিয়েবল সমর্থন করে। configurations-এর মতো একই শীর্ষ স্তরে একটি inputs অ্যারে যোগ করুন, তারপর args-এর ভেতরে সেই ইনপুটটিকে নির্দেশ করুন:
"args": ["--input", "${input:inputFile}"],
"inputs": [
{
"id": "inputFile",
"type": "promptString",
"description": "Path to the input file",
"default": "data files/input.txt"
}
]
প্রম্পটটি একটি স্ট্রিং প্রদান করে, যা আর্গুমেন্ট উপাদানে প্রতিস্থাপিত হয়। প্রতিটি রানের জন্য সাধারণ মানের ক্ষেত্রে এটি দরকারী। ইনপুট-ভেরিয়েবল নেস্টিং সমর্থিত নয় এবং ইনপুট প্রম্পট একটি শেল কমান্ড লাইনকে একাধিক আর্গুমেন্টে পার্স করে না। আপনার যদি একাধিক মানের প্রয়োজন হয়, তবে একাধিক অ্যারে উপাদান সংজ্ঞায়িত করুন বা আরও উপযুক্ত ডিবাগার-নির্দিষ্ট পদ্ধতি ব্যবহার করুন। Variables reference
অনুপস্থিত বলে মনে হওয়া আর্গুমেন্টগুলোর সমস্যা সমাধান করুন
প্রথমে নিশ্চিত করুন যে সঠিক কনফিগারেশন নির্বাচিত হয়েছে এবং রিকোয়েস্টটি launch। তারপর পরীক্ষা করুন যে আর্গুমেন্ট তালিকাটি ডিবাগারের সমর্থিত args প্রপার্টিতে রয়েছে, এর কমা এবং উদ্ধৃতি চিহ্নগুলো বৈধ JSON তৈরি করে, এবং আপনার প্রোগ্রাম সেই মানগুলোকে সরবরাহকৃত ক্রমানুসারে প্রত্যাশা করে। এছাড়াও cwd যাচাই করুন: একটি আপেক্ষিক পাথ প্রোগ্রাম দ্বারা তার ওয়ার্কিং ডিরেক্টরির সাথে সম্পর্কিতভাবে ব্যাখ্যা করা হয়, যেখানে ${workspaceFolder} একটি প্রজেক্ট-রুট শুরুর বিন্দু প্রদান করে। কোনো লঞ্চ অপ্রত্যাশিত আচরণ করলে VS Code program, cwd, args, এবং নির্বাচিত ডিবাগারের সমর্থিত প্রপার্টিগুলো চেক করার পরামর্শ দেয়। Configure debugging in Visual Studio Code
একটি পুনরাবৃত্তিযোগ্য ম্যাক ডিবাগ রানের জন্য, ওয়ার্কস্পেসের লঞ্চ কনফিগারেশনে আর্গুমেন্টগুলো সংরক্ষণ করুন, প্রতি কাঙ্ক্ষিত মানের জন্য একটি করে JSON অ্যারে উপাদান ব্যবহার করুন এবং আপনার রানটাইম প্রকৃতপক্ষে কী গ্রহণ করে তা পরীক্ষা করুন। শেল কোওটিংকে একটি পৃথক বিষয় হিসেবে বিবেচনা করুন: এটি তখন প্রযোজ্য হয় যখন একটি শেল কোনো কমান্ড পার্স করে, আর args হলো চালুকৃত প্রোগ্রামের কনফিগারেশন।
উৎসসমূহ
Configure debugging in Visual Studio Code — Microsoft
Variables reference — Microsoft
Process — Node.js