Qt 5.11 - Debugging QML Applications

QML अनुप्रयोग डीबग करना




qt

QML अनुप्रयोग डीबग करना

कंसोल एपीआई

लॉग

कंसोल पर डीबगिंग जानकारी को प्रिंट करने के लिए console.log , कंसोल.डबग, कंसोल.ऑन, कंसोल.वरन और कंसोल.रोर का उपयोग किया जा सकता है। उदाहरण के लिए:

function f(a, b) {
  console.log("a is ", a, "b is ", b);
}

आउटपुट qCDebug , qCWarning , qCCritical विधियों का उपयोग C ++ में "qml" या "js" की श्रेणी के साथ किया जाता है, जो लॉगिंग करने वाली फ़ाइल के प्रकार पर निर्भर करता है। डिबगिंग तकनीक भी देखें।

जोर

एक अभिव्यक्ति है कि सच है। यदि नहीं, तो यह कंसोल के लिए एक वैकल्पिक संदेश लिखेगा और स्टैक ट्रेस को प्रिंट करेगा।

function f() {
  var x = 12
  console.assert(x == 12, "This will pass");
  console.assert(x > 12, "This will fail");
}

घड़ी

console.time और कंसोल.टाइम लॉग (मिलीसेकंड में) उस समय को लॉग करें जो कॉल के बीच बिताया गया था। दोनों एक स्ट्रिंग तर्क लेते हैं जो माप की पहचान करता है। उदाहरण के लिए:

function f() {
    console.time("wholeFunction");
    console.time("firstPart");
    // first part
    console.timeEnd("firstPart");
    // second part
    console.timeEnd("wholeFunction");
}

निशान

जहाँ यह कहा जाता था उस बिंदु पर जावास्क्रिप्ट निष्पादन के स्टैक ट्रेस को प्रिंट करता है। स्टैक ट्रेस जानकारी में फ़ंक्शन का नाम, फ़ाइल का नाम, लाइन नंबर और कॉलम नंबर होता है। स्टैक ट्रेस पिछले 10 स्टैक फ़्रेम तक सीमित है।

गिनती

एक संदेश के साथ कोड का एक विशेष टुकड़ा निष्पादित किया गया है की वर्तमान संख्या प्रिंट console.count । अर्थात्,

function f() {
  console.count("f called");
}

f called: 1 , f called: 2 प्रिंट करेगा f called: 2 ... जब भी f() निष्पादित होता है।

प्रोफाइल

console.profile QML और जावास्क्रिप्ट प्रोफाइलरों को चालू करता है। नेस्टेड कॉल समर्थित नहीं हैं और कंसोल पर एक चेतावनी मुद्रित की जाएगी।

Comfort.profileEnd QML और JavaScript प्रोफाइलरों को बंद कर देता है। इस फ़ंक्शन को कॉल करने के लिए पिछले कॉल के बिना कंसोल.प्रोफाइल कंसोल के लिए एक चेतावनी प्रिंट करेगा। प्रोफाइलिंग डेटा प्राप्त करने और संग्रहीत करने के लिए एक कॉलिंग क्लाइंट को इस कॉल से पहले संलग्न किया जाना चाहिए था। उदाहरण के लिए:

function f() {
    console.profile();
    //Call some function that needs to be profiled.
    //Ensure that a client is attached before ending
    //the profiling session.
    console.profileEnd();
}

अपवाद

console.exception उस बिंदु पर जावास्क्रिप्ट निष्पादन के स्टैक ट्रेस के साथ एक त्रुटि संदेश प्रिंट करता है जहां इसे कहा जाता है।

डिबगिंग मॉड्यूल आयात

QML_IMPORT_TRACE परिवेश चर को QML के आयात लोडिंग तंत्र से डीबग आउटपुट सक्षम करने के लिए सेट किया जा सकता है।

उदाहरण के लिए, इस तरह की एक सरल QML फ़ाइल के लिए:

import QtQuick 2.3

Rectangle { width: 100; height: 100 }

यदि आपने QML दृश्य (या अपने QML C ++ एप्लिकेशन) को चलाने से पहले QML_IMPORT_TRACE=1 सेट किया है, तो आपको इसके समान आउटपुट दिखाई देगा:

QQmlImportDatabase::addImportPath "/qt-sdk/imports"
QQmlImportDatabase::addImportPath "/qt-sdk/bin/QMLViewer.app/Contents/MacOS"
QQmlImportDatabase::addToImport 0x106237370 "." -1.-1 File as ""
QQmlImportDatabase::addToImport 0x106237370 "Qt" 4.7 Library as ""
QQmlImportDatabase::resolveType "Rectangle" = "QDeclarativeRectangle"

QML डिबगिंग इन्फ्रास्ट्रक्चर

क्यूटी क्यूएमएल मॉड्यूल टीसीपी पोर्ट के माध्यम से डिबगिंग, निरीक्षण और प्रोफाइलिंग सेवाओं के लिए सेवाएं प्रदान करता है।

इन्फ्रास्ट्रक्चर को सक्षम करना

आपको अपने आवेदन को संकलित करते समय डिबगिंग अवसंरचना को स्पष्ट रूप से सक्षम करना होगा। यदि आप qmake का उपयोग करते हैं, तो आप प्रोजेक्ट .pro फ़ाइल में कॉन्फ़िगरेशन पैरामीटर जोड़ सकते हैं:

  • Qt क्विक 1: CONFIG+=declarative_debug
  • Qt क्विक 2: CONFIG+=qml_debug

यदि आप कुछ अन्य बिल्ड सिस्टम का उपयोग करते हैं, तो आप कंपाइलर को निम्नलिखित परिभाषित कर सकते हैं:

  • Qt क्विक 1: QT_DECLARATIVE_DEBUG
  • Qt क्विक 2: QT_QML_DEBUG

नोट: डिबगिंग इन्फ्रास्ट्रक्चर को सक्षम करना एप्लिकेशन और सिस्टम की अखंडता से समझौता कर सकता है, और इसलिए, आपको इसे केवल नियंत्रित वातावरण में सक्षम करना चाहिए। जब इन्फ्रास्ट्रक्चर सक्षम होता है, तो एप्लिकेशन निम्न चेतावनी प्रदर्शित करता है:

QML debugging is enabled. Only use this in a safe environment.

अनुप्रयोग शुरू करना

निम्नलिखित तर्कों के साथ आवेदन शुरू करें:

-qmljsdebugger=port:<port_from>[,port_to][,host:<ip address>][,block]

जहाँ port_from (अनिवार्य) या तो डीबगिंग पोर्ट निर्दिष्ट करता है या port_from निर्दिष्ट करते समय पोर्ट की एक श्रेणी का प्रारंभ पोर्ट, ip address (वैकल्पिक) उस होस्ट का IP पता निर्दिष्ट करता है जहाँ अनुप्रयोग चल रहा है, और block (वैकल्पिक) अनुप्रयोग को रोकता है डिबग क्लाइंट सर्वर से कनेक्ट होने तक चलने से। यह प्रारंभ से डीबगिंग को सक्षम करता है।

आवेदन सफलतापूर्वक शुरू होने के बाद, यह निम्नलिखित संदेश प्रदर्शित करता है:

QML Debugger: Waiting for connection on port <port_number>

एप्लिकेशन से कनेक्ट करना

जब अनुप्रयोग चल रहा होता है, एक आईडीई या एक उपकरण जो बाइनरी प्रोटोकॉल को लागू करता है, खुले पोर्ट से जुड़ सकता है।

Qt किसी फ़ाइल में प्रोफाइलिंग डेटा को कैप्चर करने के लिए एक qmlprofiler कमांड लाइन टूल प्रदान करता है। टूल को चलाने के लिए, निम्न कमांड दर्ज करें:

qmlprofiler -p <port> -attach <ip address>

क्यूटी निर्माता के साथ डिबगिंग

क्यूटी निर्माता डिबगिंग बुनियादी ढांचे का उपयोग डिबग, निरीक्षण और प्रोफाइल क्यूटी त्वरित अनुप्रयोगों के साथ-साथ दूरस्थ उपकरणों पर भी करता है। क्यूटी निर्माता जेएस को डिबग करने, ऑब्जेक्ट ट्री का निरीक्षण करने और क्यूएमएल इंजन की गतिविधियों को रूपरेखा बनाने के लिए एकीकृत क्लाइंट प्रदान करता है। अधिक जानकारी के लिए, क्यूटी निर्माता: क्यूटी क्विक प्रोजेक्ट्स को डीबग करना देखें।