Crashlytics के डैशबोर्ड में जाकर, किसी समस्या पर क्लिक करके पूरी जानकारी देखी जा सकती है इवेंट रिपोर्ट. बेहतर तरीके से समझने के लिए, उन रिपोर्ट को पसंद के मुताबिक बनाया जा सकता है आपके ऐप्लिकेशन में क्या हो रहा है और इवेंट से जुड़ी स्थितियों की जानकारी Crashlytics का इस्तेमाल करें.
कस्टम पासकोड लॉग करने के लिए, अपने ऐप्लिकेशन को इंस्टॉल करें, कस्टम लॉग मैसेज, और उपयोगकर्ता आइडेंटिफ़ायर शामिल हैं.
Crashlytics को अपवाद की शिकायत करें.
अगर आपका ऐप्लिकेशन Google Analytics के लिए Firebase SDK टूल. इन लॉग से आपको यह जानकारी मिलती है कि आपके ऐप्लिकेशन में Crashlytics से इकट्ठा किए गए इवेंट के लिए उपयोगकर्ता की कार्रवाइयां.
क्रैश की अपने-आप रिपोर्टिंग की सुविधा बंद करें और अपने उपयोगकर्ताओं के लिए ऑप्ट-इन की रिपोर्टिंग चालू करें. ध्यान दें कि, डिफ़ॉल्ट रूप से, Crashlytics आपके सभी डिवाइसों के लिए क्रैश रिपोर्ट अपने-आप इकट्ठा करता है उपयोगकर्ता हैं.
कस्टम कुंजियां जोड़ें
कस्टम कुंजियों की मदद से, आपके ऐप्लिकेशन की उस खास स्थिति का पता लगाया जा सकता है जिसकी वजह से क्रैश हो रहा है. आप अपनी क्रैश रिपोर्ट के साथ आर्बिट्रेरी कुंजी/वैल्यू पेयर जोड़ सकते हैं Firebase कंसोल में क्रैश रिपोर्ट को खोजने और फ़िल्टर करने के लिए, कस्टम कुंजी का इस्तेमाल किया जा सकता है.
- Crashlytics के डैशबोर्ड में जाकर, समस्याओं को खोजा जा सकता है जो कस्टम कुंजी से मेल खाते हैं.
- कंसोल में किसी खास समस्या की समीक्षा करते समय, हर इवेंट के लिए जुड़ी हुई कस्टम कुंजियां (कुंजी सबटैब) और यहां तक कि इवेंट को फ़िल्टर भी करें कस्टम कुंजियों के हिसाब से इवेंट (पेज के सबसे ऊपर फ़िल्टर मेन्यू).
कुंजी/वैल्यू पेयर को सेट करने के लिए, setCustomValue
तरीके का इस्तेमाल करें. उदाहरण के लिए:
Swift
// Set int_key to 100. Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key") // Set str_key to "hello". Crashlytics.crashlytics().setCustomValue("hello", forKey: "str_key")
Objective-C
पूर्णांक, बूलियन या फ़्लोट सेट करते समय, वैल्यू को @(value)
के तौर पर बॉक्स करें.
// Set int_key to 100. [[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"]; // Set str_key to "hello". [[FIRCrashlytics crashlytics] setCustomValue:@"hello" forKey:@"str_key"];
आपके पास कुंजी और सेटिंग को कॉल करके किसी मौजूदा कुंजी की वैल्यू में बदलाव करने का विकल्प भी है उसे किसी अलग वैल्यू पर सेट करें. उदाहरण के लिए:
Swift
Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key") // Set int_key to 50 from 100. Crashlytics.crashlytics().setCustomValue(50, forKey: "int_key")
Objective-C
[[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"]; // Set int_key to 50 from 100. [[FIRCrashlytics crashlytics] setCustomValue:@(50) forKey:@"int_key"];
कुंजी/वैल्यू पेयर को एक साथ जोड़ने के लिए, एक साथ setCustomKeysAndValues
तरीके का इस्तेमाल करें.
सिर्फ़ पैरामीटर के तौर पर NSDictionary:
Swift
let keysAndValues = [ "string key" : "string value", "string key 2" : "string value 2", "boolean key" : true, "boolean key 2" : false, "float key" : 1.01, "float key 2" : 2.02 ] as [String : Any] Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues)
Objective-C
NSDictionary *keysAndValues = @{@"string key" : @"string value", @"string key 2" : @"string value 2", @"boolean key" : @(YES), @"boolean key 2" : @(NO), @"float key" : @(1.01), @"float key 2" : @(2.02)}; [[FIRCrashlytics crashlytics] setCustomKeysAndValues: keysAndValues];
कस्टम लॉग मैसेज जोड़ें
ऐप्लिकेशन बंद होने की वजह से होने वाले इवेंट के बारे में ज़्यादा जानकारी देने के लिए, आपके ऐप्लिकेशन में कस्टम Crashlytics का इस्तेमाल करके लॉग इकट्ठा करें. Crashlytics, लॉग को इकट्ठा करने की अनुमति देता है ऐप्लिकेशन क्रैश होने के डेटा के साथ उसे दिखाता है और उन्हें Firebase कंसोल, लॉग टैब में मौजूद होता है.
Swift
समस्याओं का पता लगाने के लिए, log()
या log(format:, arguments:)
का इस्तेमाल करें. अगर आपको
मैसेज के साथ एक काम का लॉग आउटपुट पाना हो, जिस ऑब्जेक्ट को आपने पास किया हो
log()
को
CustomStringConvertible
प्रॉपर्टी. log()
वह विवरण प्रॉपर्टी दिखाता है, जिसके लिए आप तय करते हैं
ऑब्जेक्ट को हाइलाइट करने की सुविधा मिलती है. उदाहरण के लिए:
Crashlytics.crashlytics().log("Higgs-Boson detected! Bailing out…, \(attributesDict)")
कॉल करने पर, .log(format:, arguments:)
फ़ॉर्मैट की वैल्यू दिखाई गईं
getVaList()
. उदाहरण के लिए:
Crashlytics.crashlytics().log(format: "%@, %@", arguments: getVaList(["Higgs-Boson detected! Bailing out…", attributesDict]))
log()
या log(format:, arguments:)
इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए,
Crashlytics का इस्तेमाल करें
रेफ़रंस दस्तावेज़.
Objective-C
समस्याओं का पता लगाने के लिए, log
या logWithFormat
का इस्तेमाल करें. ध्यान दें कि अगर
पास किए जाने वाले ऑब्जेक्ट को मैसेज के साथ, एक काम का लॉग आउटपुट पाना हो
को किसी भी तरीके से, description
इंस्टेंस प्रॉपर्टी को बदलना होगा.
उदाहरण के लिए:
[[FIRCrashlytics crashlytics] log:@"Simple string message"]; [[FIRCrashlytics crashlytics] logWithFormat:@"Higgs-Boson detected! Bailing out... %@", attributesDict]; [[FIRCrashlytics crashlytics] logWithFormat:@"Logging a variable argument list %@" arguments:va_list_arg];
log
और logWithFormat
को इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, यह देखें
Crashlytics से जुड़े रेफ़रंस दस्तावेज़.
उपयोगकर्ता आइडेंटिफ़ायर सेट करना
किसी समस्या का निदान करने के लिए, यह जानना अक्सर उपयोगी होता है कि आपके किस उपयोगकर्ता को समस्या का सामना करना पड़ा किसी क्रैश को पहले से तय करके. Crashlytics का इस्तेमाल करके, डेवलपर अपनी पहचान छिपाकर, उन उपयोगकर्ताओं की पहचान करते हैं जो क्रैश रिपोर्ट देखी जा सकती हैं.
अपनी रिपोर्ट में यूज़र आईडी जोड़ने के लिए, हर उपयोगकर्ता को आईडी नंबर, टोकन या हैश की गई वैल्यू का फ़ॉर्म:
Swift
Crashlytics.crashlytics().setUserID("123456789")
Objective-C
[[FIRCrashlytics crashlytics] setUserID:@"123456789"];
अगर आपको सेट करने के बाद उपयोगकर्ता आइडेंटिफ़ायर को हटाने की ज़रूरत पड़ती है, तो इस वैल्यू को खाली स्ट्रिंग. उपयोगकर्ता आइडेंटिफ़ायर को मिटाने से मौजूदा कैंपेन नहीं हटता Crashlytics के रिकॉर्ड. अगर आपको किसी उपयोगकर्ता से जुड़े रिकॉर्ड मिटाने हैं आईडी, Firebase सहायता से संपर्क करें.
गैर-घातक अपवादों की रिपोर्ट करें
Crashlytics, आपके ऐप्लिकेशन के बंद होने की जानकारी अपने-आप भेजने की सुविधा के साथ-साथ आपको आप गैर-घातक अपवादों को रिकॉर्ड करते हैं और उन्हें अगली बार आपके ऐप्लिकेशन पर आपको भेज देते हैं लॉन्च करता है.
आप NSError
ऑब्जेक्ट को
recordError
तरीका. recordError
, कॉल करके थ्रेड के कॉल स्टैक को कैप्चर करता है
[NSThread callStackReturnAddresses]
.
Swift
Crashlytics.crashlytics().record(error: error)
Objective-C
[[FIRCrashlytics crashlytics] recordError:error];
recordError
तरीके का इस्तेमाल करते समय, NSError
को समझना ज़रूरी है
क्रैश का ग्रुप बनाने के लिए, इस डेटा का इस्तेमाल कैसे किया जाता है. गलत
recordError
तरीके का इस्तेमाल करने से, व्यवहार के बारे में गलत जानकारी मिल सकती है. ऐसा भी हो सकता है कि
इसकी वजह से Crashlytics, आपके ऐप्लिकेशन के लिए लॉग की गई गड़बड़ियों की रिपोर्टिंग को सीमित कर देता है.
किसी NSError
ऑब्जेक्ट में तीन आर्ग्युमेंट होते हैं:
domain: String
code: Int
userInfo: [AnyHashable : Any]? = nil
नुकसान पहुंचाने वाले क्रैश से अलग, जिन्हें स्टैक ट्रेस के विश्लेषण और लॉग की गई गड़बड़ियों के ज़रिए ग्रुप किया जाता है
domain
और code
के हिसाब से ग्रुप में रखे गए हैं. यह एक महत्वपूर्ण अंतर है
के बीच गड़बड़ी होती है. उदाहरण के लिए:
Swift
let userInfo = [ NSLocalizedDescriptionKey: NSLocalizedString("The request failed.", comment: ""), NSLocalizedFailureReasonErrorKey: NSLocalizedString("The response returned a 404.", comment: ""), NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString("Does this page exist?", comment: ""), "ProductID": "123456", "View": "MainView" ] let error = NSError.init(domain: NSCocoaErrorDomain, code: -1001, userInfo: userInfo)
Objective-C
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"The request failed.", nil), NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The response returned a 404.", nil), NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Does this page exist?", nil), @"ProductID": @"123456", @"View": @"MainView", }; NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:-1001 userInfo:userInfo];
जब ऊपर बताई गई गड़बड़ी को लॉग किया जाता है, तो एक नई समस्या पैदा होती है. इस समस्या को
NSSomeErrorDomain
और -1001
. लॉग की गई अन्य गड़बड़ियां जो उसी का इस्तेमाल करती हैं
डोमेन और कोड की वैल्यू, एक ही समस्या के तहत ग्रुप की गई हैं. इसमें शामिल डेटा
userInfo
ऑब्जेक्ट को की-वैल्यू पेयर में बदला जाता है और
कुंजी/लॉग सेक्शन में जोड़ दिया जाएगा.
लॉग और कस्टम बटन
क्रैश रिपोर्ट की तरह ही, कॉन्टेक्स्ट जोड़ने के लिए लॉग और कस्टम बटन को एम्बेड किया जा सकता है
NSError
. हालांकि, किस तरह के लॉग अटैच किए जाते हैं, इसमें अंतर होता है
के मुकाबले लॉग की गई गड़बड़ियां. जब कोई क्रैश होता है और ऐप्लिकेशन को फिर से लॉन्च किया जाता है, तो
डिस्क से प्राप्त होने वाले लॉग Crashlytics से वे लॉग हैं जो ठीक उसी समय लिखे गए थे
क्रैश होने के समय. जब NSError
को लॉग किया जाता है, तो ऐप्लिकेशन तुरंत
खत्म करना. क्योंकि Crashlytics, लॉग की गई गड़बड़ी की रिपोर्ट
ऐप्लिकेशन को अगली बार लॉन्च किया जाएगा. साथ ही, डिस्क पर लॉग के लिए तय की गई जगह को सीमित करना होगा,
NSError
को रिकॉर्ड करने के बाद ज़रूरत के हिसाब से लॉग किया जा सकता है, ताकि
जब Crashlytics, रिपोर्ट की रिपोर्ट को
डिवाइस. NSErrors
में लॉग इन करते समय और लॉग का इस्तेमाल करते समय, इस बैलेंस को ध्यान में रखें
कस्टम कुंजी को शामिल कर सकते हैं.
प्रदर्शन संबंधी विचार
ध्यान रखें कि NSError
में लॉग इन करना काफ़ी महंगा हो सकता है. जिस समय आपको
कॉल करने के लिए, Crashlytics मौजूदा थ्रेड के कॉल स्टैक को कैप्चर करने के लिए,
जिसे स्टैक अनविंडिंग कहते हैं. यह प्रोसेस सीपीयू और I/O इंटेंसिव हो सकती है.
खास तौर पर, ऐसे आर्किटेक्चर पर बनाया गया है जो DWARF ऐप को खोलने की सुविधा देते हैं (arm64 और x86).
आराम करने की प्रक्रिया पूरी होने के बाद, जानकारी सिंक्रोनस रूप से डिस्क पर लिखी जाती है.
इससे, अगली लाइन के क्रैश होने पर, डेटा को मिटने से बचाया जा सकता है.
हालांकि, कॉल करना सुरक्षित है बैकग्राउंड थ्रेड पर इस एपीआई का इस्तेमाल करते हैं, तो याद रखें कि इस कॉल को दूसरे सूची से मौजूदा स्टैक ट्रेस का कॉन्टेक्स्ट हट जाता है.
NSअपवादों के बारे में क्या?
Crashlytics, NSException
को लॉग करने और रिकॉर्ड करने की सुविधा नहीं देता
इंस्टेंस सीधे तौर पर नहीं करना चाहिए. आम तौर पर, Cocoa और Cocoa Touch API,
अपवाद के तौर पर सुरक्षित. इसका मतलब है कि @catch
का इस्तेमाल करने पर, हो सकता है कि कुछ गंभीर
इसका इस्तेमाल करने पर, हो सकता है कि इनका इस्तेमाल ज़्यादा सावधानी से किया जाए. आपको ऐसा कभी नहीं करना चाहिए
अपने कोड में @catch
स्टेटमेंट का इस्तेमाल करें. कृपया
Apple के दस्तावेज़
विषय से जुड़े दूसरे लेख पढ़ें.
स्टैक ट्रेस को पसंद के मुताबिक बनाएं
अगर आपका ऐप्लिकेशन गैर-नेटिव एनवायरमेंट (जैसे, C++ या Unity) में चलता है, तो अपवाद मॉडल API का इस्तेमाल करके, अपने ऐप्लिकेशन के अपवाद के तौर पर लागू होने वाले क्रैश मेटाडेटा की शिकायत करें फ़ॉर्मैट. रिपोर्ट किए गए अपवादों को नुकसान न पहुंचाने वाले के तौर पर मार्क किया गया है.
Swift
var ex = ExceptionModel(name:"FooException", reason:"There was a foo.") ex.stackTrace = [ StackFrame(symbol:"makeError", file:"handler.js", line:495), StackFrame(symbol:"then", file:"routes.js", line:102), StackFrame(symbol:"main", file:"app.js", line:12), ] crashlytics.record(exceptionModel:ex)
Objective-C
FIRExceptionModel *model = [FIRExceptionModel exceptionModelWithName:@"FooException" reason:@"There was a foo."]; model.stackTrace = @[ [FIRStackFrame stackFrameWithSymbol:@"makeError" file:@"handler.js" line:495], [FIRStackFrame stackFrameWithSymbol:@"then" file:@"routes.js" line:102], [FIRStackFrame stackFrameWithSymbol:@"main" file:@"app.js" line:12], ]; [[FIRCrashlytics crashlytics] recordExceptionModel:model];
कस्टम स्टैक फ़्रेम को सिर्फ़ पतों से भी शुरू किया जा सकता है:
Swift
var ex = ExceptionModel.init(name:"FooException", reason:"There was a foo.") ex.stackTrace = [ StackFrame(address:0xfa12123), StackFrame(address:12412412), StackFrame(address:194129124), ] crashlytics.record(exceptionModel:ex)
Objective-C
FIRExceptionModel *model = [FIRExceptionModel exceptionModelWithName:@"FooException" reason:@"There was a foo."]; model.stackTrace = @[ [FIRStackFrame stackFrameWithAddress:0xfa12123], [FIRStackFrame stackFrameWithAddress:12412412], [FIRStackFrame stackFrameWithAddress:194129124], ]; [[FIRCrashlytics crashlytics] recordExceptionModel:model];
ब्रेडक्रंब लॉग पाएं
ब्रेडक्रंब लॉग से, आपको किसी उपयोगकर्ता के इंटरैक्शन को बेहतर तरीके से समझने में मदद मिलती है आपके ऐप्लिकेशन की वजह से कोई क्रैश, नुकसान न पहुंचाने वाला या ANR इवेंट हुआ. इन लॉग से ये काम किए जा सकते हैं और डीबग करने में मदद करें.
ब्रेडक्रंब लॉग Google Analytics की मदद से काम करते हैं. इसलिए, ब्रेडक्रंब लॉग पाने के लिए, यह करने की ज़रूरत है Google Analytics चालू करें को ट्रैक करने का सुझाव दिया जाता है. Google Analytics के लिए Firebase SDK टूल जोड़ना आपके ऐप्लिकेशन को मिलता है. ये शर्तें पूरी होने के बाद, ब्रेडक्रंब के लॉग अपने-आप बन जाते हैं इसे लॉग टैब में, इवेंट के डेटा के साथ तब शामिल किया जाता है, जब आपने जानकारी देखी हो समस्या हुई है.
Analytics SDK टूल
screen_view
इवेंट को अपने-आप लॉग करता है
जिसकी मदद से ब्रेडक्रंब लॉग उन स्क्रीन की सूची दिखाएगा जो
क्रैश, नुकसान न पहुंचाने वाली या ANR वाली गड़बड़ी. screen_view
ब्रेडक्रंब लॉग में, यह
firebase_screen_class
पैरामीटर.
ब्रेडक्रंब लॉग भी किसी भी ऐसे कस्टम इवेंट जिन्हें आपने उपयोगकर्ता की प्रोफ़ाइल में मैन्युअल तरीके से लॉग किया है सेशन. इसमें इवेंट का पैरामीटर डेटा भी शामिल है. इस डेटा से, एक सीरीज़ को उपयोगकर्ता की ऐसी कार्रवाइयों की संख्या जिनसे क्रैश, नुकसान न पहुंचाने वाली या ANR वाली गड़बड़ी होती है.
ध्यान दें कि आप Google Analytics डेटा के कलेक्शन और उसके इस्तेमाल को कंट्रोल करने के बारे में, इसमें वह डेटा शामिल होता है जो ब्रेडक्रंब के लॉग में अपने-आप जानकारी भरता है.
ऑप्ट-इन रिपोर्टिंग चालू करें
डिफ़ॉल्ट रूप से, Crashlytics, आपके सभी ऐप्लिकेशन के लिए क्रैश रिपोर्ट अपने-आप इकट्ठा करता है उपयोगकर्ता हैं. उपयोगकर्ताओं को उनके भेजे जाने वाले डेटा पर ज़्यादा कंट्रोल देने के लिए, स्वचालित रिपोर्टिंग को अक्षम करके और केवल को डेटा भेजकर ऑप्ट-इन रिपोर्टिंग Crashlytics का इस्तेमाल तब किया जा सकता है, जब आपने कोड में इन्हें चुनने का विकल्प चुना हो:
अपनी
Info.plist
फ़ाइल में नई कुंजी जोड़कर, डेटा अपने-आप इकट्ठा होने की सुविधा बंद करें:- कुंजी:
FirebaseCrashlyticsCollectionEnabled
- वैल्यू:
false
- कुंजी:
Crashlytics से मिले डेटा को कॉल करके चुनिंदा उपयोगकर्ताओं के लिए, डेटा कलेक्शन की सुविधा चालू करें रनटाइम के दौरान कलेक्शन में बदलाव होता है. ओवरराइड वैल्यू सभी जगह पर बनी रहती है लॉन्च करेगा, ताकि Crashlytics अपने-आप रिपोर्ट इकट्ठा कर सके.
ऐप्लिकेशन बंद होने की अपने-आप रिपोर्ट होने की सुविधा से ऑप्ट आउट करने के लिए,
false
को ओवरराइड वैल्यू के तौर पर पास करें. जबfalse
पर सेट किया जाता है, तो नई वैल्यू तब तक लागू नहीं होती, जब तक कि है.Swift
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
Objective-C
[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:YES];
क्रैश की अहम जानकारी का डेटा मैनेज करें
क्रैश इनसाइट की सुविधा की मदद से, पहचान छिपाने वाले आपके स्टैक की तुलना की जा सकती है. इससे समस्याएं हल करने में मदद मिलती है ट्रेस करता है और बताता है कि क्या आपकी समस्या का हिस्सा है. कई समस्याओं के लिए, क्रैश इनसाइट, संसाधनों को ताकि आपको क्रैश को डीबग करने में मदद मिल सके.
क्रैश इनसाइट में, ऐप्लिकेशन क्रैश होने से जुड़े इकट्ठा किए गए डेटा का इस्तेमाल किया जाता है, ताकि स्थिरता से जुड़े सामान्य रुझानों का पता लगाया जा सके. अगर आपको अपने ऐप्लिकेशन का डेटा शेयर नहीं करना है, तो क्रैश इनसाइट की सुविधा से ऑप्ट-आउट किया जा सकता है Crashlytics से जुड़ी समस्या की सूची के सबसे ऊपर मौजूद क्रैश की अहम जानकारी मेन्यू से Firebase कंसोल में जाकर.