डिबग में चल रहे स्पंदन एप्लिकेशन की जांच कैसे करें?


101

मेरा एक छोटा सवाल है। जब ऐप डिबग मोड में हो तो मैं फ़्लटर में कोड निष्पादित करने का एक तरीका ढूंढ रहा हूं। क्या यह स्पंदन में संभव है? मैं इसे प्रलेखन में कहीं भी नहीं ढूँढ सकता।

कुछ इस तरह

If(app.inDebugMode) {
   print("Print only in debug mode");
}

डिबग या रिलीज़ मोड में फ़्लटर एप्लिकेशन चल रहा है या नहीं, इसकी जांच कैसे करें?



1
मैंने मुखर (() {प्रिंट ("डिबग मोड") की कोशिश की; सही लौटें;}); लेकिन यह सिर्फ मुझे एक त्रुटि देता है जो संकलित नहीं कर सकता है। "प्रोफ़ाइल" वे बाद में पोस्ट के बारे में बात कर रहे हैं, इससे मुझे कोई मतलब नहीं है। क्या आप इसका उपयोग करने का तरीका बता सकते हैं?
केविन वाल्टर

जवाबों:


33

जबकि यह काम करता है, स्थिरांक का उपयोग करना kReleaseModeया kDebugModeबेहतर है। देखें Rémi के जवाब में संपूर्ण स्पष्टीकरण, जो संभवत: स्वीकार किए जाते हैं सवाल किया जाना चाहिए के लिए नीचे दिए गए।


सबसे आसान तरीका यह है assertकि यह केवल डिबग मोड में चले।

यहाँ Flutter के नेविगेटर स्रोत कोड से एक उदाहरण दिया गया है:

assert(() {
  if (navigator == null && !nullOk) {
    throw new FlutterError(
      'Navigator operation requested with a context that does not include a Navigator.\n'
      'The context used to push or pop routes from the Navigator must be that of a '
      'widget that is a descendant of a Navigator widget.'
    );
  }
  return true;
}());

()कॉल के अंत में विशेष रूप से ध्यान दें - मुखर केवल एक बूलियन पर काम कर सकता है, इसलिए केवल एक फ़ंक्शन में पास होना काम नहीं करता है।


1
"विशेष रूप से नोट" वह हिस्सा था जो मेरी आईडीई पर ट्रिपिंग था। आपको बहुत - बहुत धन्यवाद!
केविन वाल्टर

5
जब आप लिखते हैं कि () { .... }आप फ़ंक्शन को परिभाषित कर रहे हैं, लेकिन इसे कॉल नहीं कर रहे हैं। ()वास्तव में फ़ंक्शन को जोड़ना ।
rmtmckenzie

269

जबकि तकनीकी रूप से काम करता है, आपको उनका उपयोग नहीं करना चाहिए।

इसके बजाय, kReleaseModeसे स्थिरांक का उपयोग करेंpackage:flutter/foundation.dart


अंतर सभी पेड़ झटकों के बारे में है

ट्री शेकिंग (उर्फ कोडर को अप्रयुक्त कोड को हटाने) वैरिएबल पर स्थिर होता है।

मुद्दा यह है कि जोर- isInReleaseModeशोर से हमारे बुलियन स्थिर नहीं हैं । तो जब हमारे ऐप को शिपिंग करते हैं, तो देव और रिलीज़ कोड दोनों शामिल होते हैं।

दूसरी ओर, kReleaseMode है एक निरंतर। इसलिए संकलक अप्रयुक्त कोड को हटाने में सक्षम है, और हम सुरक्षित रूप से कर सकते हैं:

if (kReleaseMode) {

} else {
  // Will be tree-shaked on release builds.
}

29
बस एक छोटा सा पक्ष नोट करें, प्रदूषण से बचने के लिए अपनी कक्षा को अज्ञात आयात के साथ आयात करें जैसे import 'package:flutter/foundation.dart' as Foundation;आप कर सकते हैंFoundation. kReleaseMode
ओलिवर डिक्सन

3
रेमी को समझाने के लिए धन्यवाद - मैंने जोर देने के बजाय इसे चुना - अच्छा सामान!
फ्रेड

1
यह इतना नीचे कैसे है, यह स्वीकृत उत्तर होना चाहिए!
Empty2k12

5
इसके अलावा वहाँ है kDebugMode
अलेक्जेंडर Skvortsov

1
क्या विगेट्स के साथ ट्री शेकिंग भी होगी? तो अगर मैं दृश्यमान विजेट के साथ किया: kDebugMode रिलीज बिल्ड के लिए संकलक द्वारा उस विजेट को हटा दिया जाएगा?
वाइटकैसल

56

यह थोड़ा स्निपेट आपको वही करना चाहिए जो आपको चाहिए

bool get isInDebugMode {
  bool inDebugMode = false;
  assert(inDebugMode = true);
  return inDebugMode;
}

यदि आप अपने IDE को main.dartडिबग मोड में लॉन्च करने के लिए कॉन्फ़िगर नहीं कर सकते हैं जहां आप एक बूलियन सेट कर सकते हैं।


मैंने इसे एक Applicationकक्षा में स्थिर के रूप में रखा है, इसलिए मैं यह लिख सकता Application.isInDebugModeहूं कि मुझे इसकी आवश्यकता कहां है।
टोनीटॉर्नडो

बहुत ही सुरुचिपूर्ण, मेरे ऐप में इसे लागू किया गया।
व्रचलिन

56

इसका एक सरल समाधान यहां दिया गया है:

import 'package:flutter/foundation.dart';

तो आप की kReleaseModeतरह उपयोग कर सकते हैं

if(kReleaseMode){ // is Release Mode ??
    print('release mode');
} else {
    print('debug mode');
}

28

kDebugMode

अब आप kDebugModeस्थिरांक का उपयोग कर सकते हैं ।

if (kDebugMode) {
  // Code here will only be included in debug mode.
  // As kDebugMode is a constant, the tree shaker
  // will remove the code entirely from compiled code.
} else {

}

यह preferrable खत्म हो गया है !kReleaseModeके रूप में यह भी प्रोफ़ाइल मोड के लिए चेक, यानी kDebugModeइसका मतलब में नहीं रिलीज मोड और में नहीं प्रोफ़ाइल मोड

kReleaseMode

यदि आप केवल रिलीज़ मोड की जाँच करना चाहते हैं और प्रोफ़ाइल मोड के लिए नहीं, तो आप kReleaseModeइसके बजाय उपयोग कर सकते हैं :

if (kReleaseMode) {
  // Code here will only be run in release mode.
  // As kReleaseMode is a constant, the tree shaker
  // will remove the code entirely from other builds.
} else {

}

kProfileMode

यदि आप केवल प्रोफाइल मोड के लिए जांचना चाहते हैं और रिलीज मोड के लिए नहीं, तो आप kProfileModeइसके बजाय उपयोग कर सकते हैं :

if (kProfileMode) {
  // Code here will only be run in release mode.
  // As kProfileMode is a constant, the tree shaker
  // will remove the code entirely from other builds.
} else {

}

20

पिकी नहीं होना चाहिए, लेकिन नींव पैकेज में एक kDebugModeस्थिरांक शामिल है ; इसलिए :

import 'package:flutter/foundation.dart' as Foundation;

if(Foundation.kDebugMode) {
   print("App in debug mode");
}

3

यह पता लगाने के लिए ये दो चरण हैं कि आवेदन किस मोड में चलता है

  1. प्राप्त करने के लिए निम्न आयात जोड़ें

    import 'package:flutter/foundation.dart' as Foundation;
    
  2. और kReleaseModeजांचें कि एप्लिकेशन किस मोड पर चल रहा है

    if(Foundation.kReleaseMode){ 
      print('app release mode');
    } else {
      print('App debug mode');
    }
    


0

डार्ट डॉक्यूमेंटेशन से निकाला गया :

जब वास्तव में दावे काम करते हैं? यह आपके द्वारा उपयोग किए जा रहे उपकरण और ढांचे पर निर्भर करता है:

  • स्पंदन डिबग मोड में जोर को सक्षम करता है।
  • डेवलपमेंट-ओनली टूल्स जैसे डार्टडाइक आमतौर पर डिफ़ॉल्ट रूप से अभिक्रियाओं को सक्षम करता है।
  • कुछ उपकरण, जैसे डार्ट और dart2js, कमांड-लाइन ध्वज के माध्यम से अभिकथन का समर्थन करते हैं: --enable-asserts।

में उत्पादन कोड, कथनों अनदेखी कर रहे हैं , और ज़ोर करने के लिए तर्क का मूल्यांकन नहीं कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.