Xcode में कंसोल: मुख्य अवधारणाएं, डेटा आउटपुट और डिबगिंग

लेखक: IT Sectr प्रकाशित: 2026-05-06 पढ़ने का समय: 8 मिनट

Xcode में कंसोल iOS डेवलपमेंट के लिए एक डिबगिंग टूल है जो NSLog, print, os_log आउटपुट और ऐप क्रैश लॉग को रियल टाइम में प्रदर्शित करता है। Apple Unified Logging के अनुसार, iOS 10 से Apple Unified Logging System के माध्यम से केंद्रीकृत संदेश संग्रह के लिए NSLog के बजाय os_log का उपयोग करने की अनुशंसा करता है। कंसोल डिबगर आउटपुट और सिस्टम संदेशों को एक ही Debug Area विंडो में जोड़ता है, जो डेवलपमेंट के किसी भी क्षण में सुलभ है।

मुख्य बिंदु

  • कंसोल Xcode — NSLog, os_log, print और iOS ऐप क्रैश लॉग देखने के लिए Debug Area विंडो
  • Unified Logging System — Apple की आधुनिक लॉगिंग प्रणाली जिसमें श्रेणियां, स्तर और डिस्क पर संग्रहण है
  • os_log — गतिशील स्तर कॉन्फ़िगरेशन समर्थन के साथ अनुशंसित लॉगिंग API
  • क्रैश लॉग डिवाइस या सिम्युलेटर पर ऐप क्रैश होने पर स्वचालित रूप से कंसोल में दिखाई देते हैं
  • ब्रेकपॉइंट लॉग — Debugger Command के माध्यम से निष्पादन रोके बिना कंसोल में संदेश आउटपुट करते हैं

Xcode में कंसोल क्या है

कंसोल Xcode में Debug Area का हिस्सा है, जो एडिटर के निचले पैनल में स्थित है (View → Debug Area → Activate Console, शॉर्टकट Cmd + Shift + Y)। कंसोल चल रहे ऐप से सभी टेक्स्ट आउटपुट दिखाता है: NSLog, os_log, print से संदेश, रनटाइम चेतावनियां और ऐप क्रैश होने पर स्वचालित अपवाद डंप।

कंसोल काम करता है सिम्युलेटर और भौतिक डिवाइस दोनों पर। सिम्युलेटर में, संदेश स्थानीय पाइप के माध्यम से तुरंत पहुंचते हैं; डिवाइस पर, वे 1–3 फ्रेम की देरी के साथ USB कनेक्शन के माध्यम से आते हैं। प्रोडक्शन ऐप के लिए, डिवाइस पर कंसोल उपलब्ध नहीं है — डेवलपर Crashlytics या log collect के माध्यम से दूरस्थ संग्रह के साथ Unified Logging पर निर्भर करते हैं।

Mac पर सिस्टम Console.app के विपरीत, Xcode में कंसोल विंडो केवल वर्तमान चल रहे ऐप के लॉग दिखाती है (फ़िल्टरिंग क्षमता के साथ)। Console.app Mac पर सभी प्रक्रियाओं के लॉग एकत्र करता है, जिसमें iOS सिम्युलेटर शामिल हैं। हालांकि, iOS ऐप को डिबग करने के लिए, डेवलपर LLDB डिबगर के साथ एकीकरण के कारण अंतर्निर्मित Xcode कंसोल का उपयोग करते हैं।

लॉगिंग API: NSLog, os_log और print

तीन मुख्य API iOS डेवलपर के लिए कंसोल आउटपुट के लिए उपलब्ध हैं: NSLog (पुराना), os_log (अनुशंसित), और print (केवल Swift)। प्रत्येक की प्रदर्शन, फ़ॉर्मेटिंग और Unified Logging System के साथ संगतता के मामले में अपनी विशेषताएं हैं।

NSLog — क्लासिक लॉगिंग

NSLog Foundation का एक फ़ंक्शन है, जो Objective-C और Swift में उपलब्ध है। NSLog टाइमस्टैंप, प्रक्रिया नाम और PID के साथ संदेश आउटपुट करता है। नुकसान: NSLog सिंक्रोनस रूप से सिस्टम बफर में लिखता है, लेखन के दौरान वर्तमान थ्रेड को ब्लॉक करता है। बार-बार कॉल के साथ (जैसे, लूप में), NSLog ध्यान देने योग्य विलंब पैदा करता है। Apple नए प्रोजेक्ट के लिए NSLog की अनुशंसा नहीं करता, लेकिन यह पुराने कोड और तीसरे पक्ष की लाइब्रेरी के साथ संगत रहता है।

os_log — आधुनिक मानक

os_log os.framework से एक API है, जो iOS 10 में पेश किया गया था। os_log अतुल्यकालिक है: संदेश कतारबद्ध होता है और कॉल करने वाले थ्रेड को ब्लॉक किए बिना बफर में लिखा जाता है। WWDC 2016 के अनुसार, उच्च-लोड परिदृश्यों में os_log NSLog से 50 गुना तेज है। os_log गतिशील नियंत्रण का भी समर्थन करता है: DEBUG-स्तर के संदेश केवल Debug बिल्ड में एकत्र किए जाते हैं, और Release में वे बिना किसी ओवरहेड के अनदेखा कर दिए जाते हैं।

print() — केवल Swift आउटपुट

print() Swift में सबसे सरल आउटपुट विधि है। print stdout (मानक आउटपुट) में लिखता है, जिसे Xcode कंसोल में रीडायरेक्ट करता है। print मेटाडेटा (समय, स्तर) नहीं जोड़ता, लेकिन stdout बफ़रिंग का समर्थन करता है। त्वरित डिबगिंग के लिए, print एक सुविधाजनक उपकरण है, लेकिन स्थायी लॉगिंग के लिए यह कार्यक्षमता और नियंत्रण में os_log से पीछे है।

swift
import os.log

// NSLog — पुराना, अवरुद्ध करने वाला
NSLog("Application started")

// os_log — अनुशंसित, अतुल्यकालिक
let log = OSLog(
    subsystem: "com.myapp",
    category: "lifecycle"
)
os_log("Application started", log: log)

// print — तेज़ Swift आउटपुट
print("Application started")

Unified Logging: श्रेणियां, स्तर और उपप्रणालियां

Unified Logging System (ULS) Apple का व्यापक लॉगिंग बुनियादी ढांचा है, जो iOS 10 और macOS Sierra में पेश किया गया। ULS सभी सिस्टम प्रक्रियाओं से संदेशों को एक ही भंडार में एकत्र करता है, जिसमें Mac पर log कमांड-लाइन टूल के माध्यम से दूरस्थ पहुंच की क्षमता है। डेवलपर ULS में लिखने के लिए os_log और पढ़ने के लिए कंसोल का उपयोग करते हैं।

उपप्रणालियां और श्रेणियां

प्रत्येक OSLog की पहचान subsystem (जैसे, com.myapp.network) और category (जैसे, http, websocket) की जोड़ी से होती है। उपप्रणाली एप्लिकेशन डोमेन है (एक ऐप के अलग-अलग मॉड्यूल के लिए कई उपप्रणालियां हो सकती हैं)। श्रेणी उपप्रणाली के अंदर एक घटक है। subsystem + category संयोजन कंसोल और log collect में लचीली लॉग फ़िल्टरिंग की अनुमति देता है।

OSLog लॉगिंग स्तर

स्तरOSLogTypeकंसोल प्रदर्शनRelease संग्रह
Default.defaultहमेशाहां
Info.infoos_log UI सक्षम होने परहां
Debug.debugकेवल Debug बिल्ड मेंनहीं
Error.errorहमेशा लाल लेबल के साथहां
Fault.faultहमेशा बैंगनी लेबल के साथहां

log collect — दूरस्थ लॉग संग्रह

log collect कमांड Mac पर कनेक्टेड iOS डिवाइस से संग्रहीत लॉग को .logarchive फ़ाइल में एकत्र करता है। इस फ़ाइल को Mac पर Console.app में विस्तृत विश्लेषण के लिए खोला जा सकता है, जिसमें os_log संदेश, क्रैश लॉग और सिस्टम डायग्नोस्टिक्स शामिल हैं। डिवाइस पर संग्रह सक्षम करने के लिए, डेवलपर मोड सक्षम करना और डिवाइस को USB के माध्यम से कनेक्ट करना आवश्यक है।

कंसोल के साथ काम करना: चरण-दर-चरण डिबगिंग और क्रैश लॉग विश्लेषण

व्यावहारिक कार्य कंसोल के साथ तीन मुख्य परिदृश्य शामिल करता है: डेवलपमेंट के दौरान सक्रिय लॉगिंग, क्रैश के बाद क्रैश लॉग विश्लेषण, और .logarchive के माध्यम से दूरस्थ डायग्नोस्टिक्स। प्रत्येक परिदृश्य के लिए उपकरणों और सेटिंग्स का एक इष्टतम सेट है।

डेवलपमेंट के लिए कंसोल सेट करना

अनुशंसा की जाती है कि प्रत्येक एप्लिकेशन मॉड्यूल के लिए स्तरों के साथ एक अलग OSLog बनाएं: debug (विस्तृत डिबगिंग), info (मुख्य स्थिति संक्रमण), error (अपवाद और विफलताएं)। Xcode कंसोल में, अपने एप्लिकेशन के subsystem द्वारा फ़िल्टरिंग सक्षम करें ताकि सिस्टम संदेशों को बाहर किया जा सके जो शोर पैदा करते हैं और ऐप तर्क से विचलित करते हैं।

क्रैश लॉग विश्लेषण

जब ऐप क्रैश होता है, Xcode स्वचालित रूप से निष्पादन रोकता है और उस थ्रेड को दिखाता है जहां क्रैश हुआ, कंसोल में पूर्ण stack trace के साथ। क्रैश लॉग की पहली पंक्ति में अपवाद प्रकार (NSException, EXC_BAD_ACCESS) और कारण होता है। Stack trace को नीचे से ऊपर तक पढ़ें: अंतिम कॉल की गई विधि क्रैश स्थान है। एन्क्रिप्टेड पतों के लिए (Release में), dSYM के माध्यम से symbolication आवश्यक है।

swift
// OSLog के मॉड्यूलर कॉन्फ़िगरेशन का उदाहरण
extension OSLog {
    static let uiLifecycle = OSLog(
        subsystem: "com.myapp.ui",
        category: "lifecycle"
    )
    static let network = OSLog(
        subsystem: "com.myapp.network",
        category: "http"
    )
    static let database = OSLog(
        subsystem: "com.myapp.data",
        category: "core-data"
    )
}

// स्तरों के साथ उपयोग
os_log("View did load", log: .uiLifecycle, type: .debug)
os_log("HTTP 200 received", log: .network, type: .info)
os_log("Failed to save: \(error.localizedDescription)",
    log: .database, type: .error)

उन्नत सुविधाएं: ब्रेकपॉइंट लॉग और कस्टम प्रारूप

Xcode कंसोल कई उन्नत सुविधाओं का समर्थन करता है जो सरल लॉगिंग से परे हैं। ब्रेकपॉइंट लॉग आपको निष्पादन रोके बिना कंसोल में संदेश आउटपुट करने की अनुमति देते हैं, और Debugger Command में LLDB कमांड आउटपुट फ़ॉर्मेटिंग पर पूर्ण नियंत्रण देते हैं।

बिना रुके ब्रेकपॉइंट लॉग

आप ब्रेकपॉइंट कॉन्फ़िगर कर सकते हैं ताकि वह कंसोल में संदेश आउटपुट करे और स्वचालित रूप से निष्पादन जारी रखे। वांछित पंक्ति पर ब्रेकपॉइंट सेट करें, राइट-क्लिक करें → Edit Breakpoint → Debugger Command जोड़ें: “po self” या “expr @import UIKit” + Debugger Command: “po self.view”। Automatically continue after evaluating चेक करें। लॉन्च करने के बाद, ब्रेकपॉइंट हर बार पंक्ति पर पहुंचने पर कमांड परिणाम कंसोल में आउटपुट करेगा, बिना थ्रेड को बाधित किए।

कंसोल में LLDB कमांड

Xcode कंसोल समर्थन करता है ब्रेकपॉइंट पर रुकने पर मनमाने LLDB कमांड का निष्पादन। po (print object) ऑब्जेक्ट विवरण आउटपुट करता है, p (print) आदिम मान आउटपुट करता है, और expr Swift/ObjC अभिव्यक्तियां निष्पादित करता है। फ़ॉर्मेटेड आउटपुट के लिए, p/CGRectGetWidth का उपयोग करें। LLDB आउटपुट ब्रेकपॉइंट तक पहुंचने के तुरंत बाद कंसोल में दिखाई देता है।

swift
func processUserData(user: User) {
    // Debugger Command के साथ ब्रेकपॉइंट यहां:
    // po "User name: \(user.name)"
    // expr user.age = 30
    print("Processing user: \(user.name)")
}

// अनुक्रम के साथ कस्टम लॉगिंग का उदाहरण
func trackMethodCall(
    file: String = #file,
    function: String = #function
) {
    os_log("[\(function)] called",
        log: .uiLifecycle, type: .debug)
}

Instruments के साथ एकीकरण

Xcode कंसोल Instruments — Xcode के प्रोफाइलिंग टूल — के साथ निकटता से एकीकृत है। Product → Profile के माध्यम से Logging टेम्पलेट के साथ ऐप चलाने पर, सभी os_log संदेश टाइमस्टैंप के साथ Instruments ट्रेस में रिकॉर्ड किए जाते हैं। यह आपको एक ही टाइमलाइन पर लॉग, प्रदर्शन और सिस्टम ईवेंट एक साथ देखने की अनुमति देता है, जो रेस कंडीशन और प्रदर्शन प्रतिगमन के निदान के लिए महत्वपूर्ण है।

अक्सर पूछे जाने वाले प्रश्न

NSLog और os_log में क्या अंतर है?

NSLog सिंक्रोनस है, थ्रेड को ब्लॉक करता है और हमेशा संदेश आउटपुट करता है। os_log अतुल्यकालिक है, उच्च-लोड परिदृश्यों में 50 गुना तेज है, श्रेणियों का समर्थन करता है और प्रदर्शन हानि के बिना Release बिल्ड में डिबग स्तरों को गतिशील रूप से अक्षम करता है।

कंसोल ऐप से os_log क्यों नहीं दिखाता?

जांचें लॉगिंग स्तर: डिफ़ॉल्ट रूप से, कंसोल केवल default और ऊपर दिखाता है। info और debug देखने के लिए, Xcode कंसोल में os_log मेनू खोलें और स्कीम सेटिंग्स में Include Info Messages और Include Debug Messages चुनें (Edit Scheme → Run → Arguments → OS_ACTIVITY_MODE = debug)।

कंसोल लॉग को साझा करने के लिए फ़ाइल में कैसे सहेजें?

चुनें कंसोल में वांछित संदेश, कॉपी करें (Cmd + C) और किसी भी टेक्स्ट एडिटर में पेस्ट करें। पूर्ण डंप के लिए, टर्मिनल कमांड का उपयोग करें: sudo log collect --device --output /tmp/app_logs.logarchive — यह iOS डिवाइस से सभी लॉग को संरचित प्रारूप में सहेजता है।

Release बिल्ड में os_log कैसे सक्षम करें?

os_log प्रकार .default और .error डिफ़ॉल्ट रूप से Release में काम करते हैं। Release में .info और .debug के लिए, आपको Xcode स्कीम में लॉन्च आर्गुमेंट -OSLogPreferencesApp “$(PRODUCT_BUNDLE_IDENTIFIER):debug” जोड़ना होगा। इस आर्गुमेंट के बिना, डिबग संदेश Release में एकत्र नहीं होते, जिससे डिवाइस संसाधनों की बचत होती है।

इतिहास में विशिष्ट क्रैश लॉग कैसे खोजें?

खोलें Xcode में Window → Organizer → Crashes। आयोजक अपवाद प्रकार के अनुसार समूहित, परीक्षकों के उपकरणों से एकत्र सभी क्रैश लॉग दिखाता है। Symbolication के लिए उस बिल्ड से .dSYM फ़ाइल की आवश्यकता है जिसमें क्रैश हुआ — Xcode इसे स्वचालित रूप से ढूंढता है यदि संग्रह उपलब्ध है।

सारांश

  • कंसोल Xcode — Debug Area में NSLog, os_log, print और क्रैश लॉग देखने के लिए अंतर्निर्मित उपकरण
  • os_log — अतुल्यकालिक लेखन, श्रेणियों और Unified Logging System समर्थन के साथ अनुशंसित API
  • Unified Logging मॉड्यूलर लॉग संगठन के लिए उपप्रणालियां और श्रेणियां प्रदान करता है
  • ब्रेकपॉइंट लॉग एप्लिकेशन निष्पादन रोके बिना कंसोल में संदेश आउटपुट करते हैं
  • LLDB कमांड po, p, expr कंसोल आउटपुट फ़ॉर्मेटिंग पर पूर्ण नियंत्रण देते हैं
  • क्रैश लॉग विश्लेषण कंसोल में अपवाद से शुरू होता है और Release के लिए dSYM के माध्यम से symbolication की आवश्यकता होती है
  • Instruments के साथ एकीकरण एक ही टाइमलाइन पर लॉग को प्रोफाइलिंग के साथ संयोजित करने की अनुमति देता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें