2012-11-13 17 views
8

क्यूएमएल को डीबग/प्रोफाइल करने में सक्षम होने के लिए एक ऐप में संकलित करने के लिए कौन सा सॉफ़्टवेयर क्यूटी/क्यूएमएल टुकड़े की आवश्यकता है?क्यूटी कैसे करें - Qml डीबगिंग और/या प्रोफाइलिंग?

मेरा वर्तमान ऐप cmake का उपयोग करके बनाया गया है और एम्बेडेड डिवाइस पर चलता है। इसके अलावा, मैं क्यूटी 4.8.3 (अब तक 4.7.0) का उपयोग शुरू कर रहा हूं।

मैं (एक एम्बेडेड डेवलपर के लिए) इन फैंसी/शांत सुविधाओं का उपयोग करना चाहते हैं:

http://doc.qt.digia.com/qtcreator/creator-qml-performance-monitor.html

मैं गर्त qt-project खोज की है मदद की तलाश में है, लेकिन मैं स्पष्ट नहीं मिला है क्या कर रहे हैं कस्टमाइज़ बिल्ड वातावरण के साथ, जब आप रिमोट ऐप को डीबग/प्रोफाइल करना चाहते हैं तो चरणों की आवश्यकता होती है।

तो, मैं जानना चाहता हूं कि निम्नलिखित में से किसी भी कदम की आवश्यकता है, और सकारात्मक मामले में, वास्तव में आवश्यक कोड क्या है।

  • क्यूटी पुस्तकालयों कॉन्फ़िगर विशिष्ट विकल्प।
  • क्यूटी क्रिएटर विशिष्ट विकल्प को दूरस्थ ऐप से अटैच/लॉन्च करने के लिए।
  • सीमेक में अंतिम ऐप निष्पादन योग्य में आवश्यक और पुस्तकालयों की आवश्यकता है।

कोई भी मदद, लिंक, आदि का स्वागत है।

उत्तर

12

क्यूटी 4.8 के साथ यह बहुत आसान हो गया। सभी आवश्यक पुस्तकालय अब क्यूटी का हिस्सा हैं और आपको अपने क्यूटी संस्करण के लिए डीबग लाइब्रेरी बनाने की ज़रूरत नहीं है।

मैं एक क्यूटी/क्यूएमएल डेस्कटॉप एप्लिकेशन भी विकसित कर रहा हूं जो सीएमके के साथ बनाया गया है। मैं QML डिबगिंग को सक्षम करने के लिए निम्न चरणों को पूरा करने के लिए किया था:

  1. अपने आवेदन के स्टार्ट-अप कोड में डिबगिंग संबल शामिल

    #include <QtDeclarative/qdeclarativedebug.h> 
    
        /* [...] */ 
    
        QDeclarativeDebuggingEnabler enabler; 
    
  2. अपने आवेदन के निष्पादन के पर्यावरण के लिए QML_DISABLE_OPTIMIZER=1 जोड़े

    यह प्रोजेक्ट पेज के निष्पादन टैब में क्यूटी निर्माता के भीतर किया जा सकता है।

  3. टिक QML डिबगिंग के लिए चेकबॉक्स भी निष्पादन टैब

    यह क्यूटी निर्माता और QML डिबगर घटक आवेदन

में एम्बेडेड बीच संचार के लिए आवश्यक आदेश पंक्ति पैरामीटर कहते हैं में पाया यदि सब कुछ ठीक हो गया है तो एप्लिकेशन आपको डीबग मोड में शुरू होने पर निम्न आउटपुट के साथ धन्यवाद देता है:

क्यूएमएल डीबगिंग सक्षम है। केवल एक सुरक्षित वातावरण में इसका इस्तेमाल करें!
QDeclarativeDebugServer: पोर्ट 3768 पर कनेक्शन की प्रतीक्षा ...
QDeclarativeDebugServer: कनेक्शन

स्थापना की है कि मैं breakpoints सेट और चर का निरीक्षण करने में सक्षम था के बाद।इसके अलावा विश्लेषण पृष्ठ के माध्यम से सुलभ प्रोफाइलर बस काम किया।

आपका मामला स्पष्ट रूप से एक एम्बेडेड एप्लिकेशन विकसित करने के रूप में थोड़ा और जटिल है।

क्यूटी निर्माता को एम्बेडेड प्लेटफार्मों पर सीएमके-आधारित परियोजनाओं को तैनात और निष्पादित करने का कोई समर्थन नहीं है। आपको वह खुद करना होगा। मत भूलना QML डिबगिंग कॉन्फ़िगर करने के लिए अपने आवेदन के लिए आवश्यक तर्क पारित करने के लिए:

$ your-app -qmljsdebugger=port:3768,block 

एक रूपरेखा सत्र इस्तेमाल के लिए एक दूर से चल रहे ऐप्लिकेशन को क्यूटी निर्माता संलग्न करने में "विश्लेषण" इसी "बाह्य" प्रविष्टियों क्यूटी निर्माता मुख्य मेनू में मेनू। "डीबग"> "डीबग" के तहत "डीबग-सर्वर से कनेक्ट करें" के साथ डिबगिंग के लिए एक ही विकल्प कहां है।

+1

मैं सफलतापूर्वक QML प्रोफाइलर पर पहली बार ऐप्लिकेशन डेटा के लिए देखा है। मैंने बिंदु 3 का उपयोग नहीं किया, मैंने अभी एनालिजा-> क्यूएमएल प्रोफाइलर पर क्लिक किया। अब, पहले परीक्षणों के बाद मुझे "QDeclarativeDebugServer मिल रहा है: एक और क्लाइंट पहले ही कनेक्ट हो चुका है"। क्या यह टालने योग्य है या क्या मुझे अपना ऐप रीसेट करने की ज़रूरत है? – kikeenrique

+0

मैं इस संदेश को अपने आप को नहीं देखा है, बग यह आप डिबग/प्रोफ़ाइल एक ही आवेदन उदाहरण दो बार कर कोशिश करते हैं और है कि अब अनुमति दी गई है लगता है। मैं आपकी मदद नहीं कर सकता क्योंकि यह मेरे डेस्कटॉप एप्लिकेशन के साथ नहीं होता है। – sebasgo

2

यहाँ @sebasgo's answer करने के लिए एक "स्वच्छ" विकल्प, मद है 1.

आप QtQuick2 साथ Qt5 का उपयोग कर रहे हैं, तो आप केवल कुछ फ़ाइल में QtQuick शामिल करने से पहले QT_QML_DEBUG परिभाषित करने के लिए (यह रूप में क्या फ़ाइल बात नहीं है, जरूरत है जब तक यह निष्पादन योग्य का हिस्सा है)। उदाहरण के लिए, यह आपके main.cpp साथ लाइनों शुरू करने के लिए पर्याप्त है:

#define QT_QML_DEBUG 
#include <QtQuick> 

यदि आप के बजाय संकलक के -DQT_QML_DEBUG ध्वज का उपयोग चोट नहीं करेगा (उदा के माध्यम से qmake DEFINES या cmake add_definitions निर्देशों), संभवतः केवल में डिबग बनाता है।

यदि आप विरासत QtQuick1 (या तो Qt5 या Qt4 में) के साथ अटक गए हैं, तो इसके बजाय QT_DECLARATIVE_DEBUG मैक्रो का उपयोग करें, उदा।

-2

क्यूटी 5.1 नए के साथ:

#define QT_DECLARATIVE_DEBUG 
#include <QtDeclarative> 

उत्सुक के लिए, यहाँ एक प्रासंगिक क्यूटी स्रोत, लघु और आत्म व्याख्यात्मक है फ़ंक्शन qInstallMessageHandler जोड़ा गया था। यह आपको पकड़ने, और लॉग, त्रुटियों और चेतावनियों को चलेगा ताकि आप उन्हें पसंद कर सकें।

+0

आपका लिंक और विवरण में कहा गया है कि यह क्यूटी में पेश किया गया था 5.0 – kikeenrique

+0

इसके अलावा, इस आगे के परिवर्तन के बिना QML लिए काम नहीं करता ... –

6

मैं क्यूटी 5 का उपयोग कर रहा हूं, और यह और भी आसान हो गया। बस इस एक कदम मेरी तरफ आवश्यक था QML रूपरेखा करने के लिए:

#include <QQmlDebuggingEnabler> 

... 

QQmlDebuggingEnabler enabler; 
+0

मैं भी क्यूटी 5 का उपयोग, लेकिन मैं "ऐसी कोई फ़ाइल या निर्देशिका" की त्रुटि मिली क्या समस्या हो सकती है? क्या मुझे कुछ और स्थापित करना चाहिए? – MeM

+0

@MeM: बहुत कठिन है कि अभी से कहने के लिए ... मैं आपको लगता है कि समस्या और भी बहुत कुछ जानकारी के साथ एक नया सवाल खोलने का सुझाव ... –

3

जाँच हो रही है docs सभी दिए गए उत्तर अनावश्यक होने लगते हैं। इसके अलावा यह रिलीज में कोड डीबग हार्डकोड करता है। मुझे कोई संकेत नहीं है कि QQmlDebuggingEnabler आवश्यक होगा, लेकिन यदि आप here और here कोड को चेक करते हैं, तो आप यह पहचान लेंगे कि QQmlDebuggingEnabler का इंस्टीटेशन आवश्यक नहीं है। बस QQmlDebuggingEnabler शामिल करें और QT_QML_DEBUG ध्वज उदा। इस (CMake) की तरह

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")

हालांकि docsQQmlDebuggingEnabler के अनुसार आवश्यक नहीं है।

Furtermore: unoptimized कोड रूपरेखा कोई मतलब नहीं है।

मुझे QT_QML_DEBUG ध्वज के रूप में स्थापित करने और QML डिबगिंग के लिए चेकबॉक्स की जाँच के लिए पर्याप्त है।