Mac पर किसी 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 डाक्यूमेंट करता है कि वेरिएबल प्रतिस्थापन (substitution) के बाद स्पेस वाला पाथ एक सिंगल स्ट्रिंग बना रहता है। इसलिए, उदाहरण का फ़ाइल पाथ एक ही आर्ग्युमेंट है; केवल स्पेस को बनाए रखने के लिए इसके चारों ओर एम्बेडेड एस्केप किए गए कोटेशन मार्क्स न जोड़ें। ${workspaceFolder} VS Code में खोले गए फ़ोल्डर को रीज़ॉल्व करता है, जो पाथ को प्रोजेक्ट से जुड़े रहने देता है। Variables reference

यह टर्मिनल में कमांड टाइप करने से अलग है। macOS टर्मिनल के डिफ़ॉल्ट शेल के रूप में zsh का उपयोग करता है, लेकिन लॉन्च कॉन्फ़िगरेशन का args ऐरे टारगेट प्रोसेस के आर्ग्युमेंट्स को दर्शाता है। शेल सिंटैक्स जैसे *, >, या | वहां अपने आप विस्तारित (expand) या निष्पादित नहीं होते हैं। उदाहरण के लिए, यदि आपका प्रोग्राम लिटरल वैल्यू 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 निष्पादन योग्य (executable) और स्क्रिप्ट पाथ का प्रतिनिधित्व करती हैं; शेष प्रविष्टियाँ अतिरिक्त मान हैं। इनका अस्थायी रूप से निरीक्षण करने के लिए, इसे 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

Mac पर दोहराए जा सकने वाले डीबग रन के लिए, आर्ग्युमेंट्स को वर्कस्पेस के लॉन्च कॉन्फ़िगरेशन में स्टोर करें, प्रति इच्छित मान एक JSON ऐरे एलिमेंट का उपयोग करें, और जांचें कि आपका रनटाइम वास्तव में क्या प्राप्त करता है। शेल कोटिंग को एक अलग विषय मानें: यह तब लागू होता है जब कोई शेल कमांड को पार्स करता है, जबकि args लॉन्च किए गए प्रोग्राम के लिए कॉन्फ़िगरेशन है।

स्रोत