2012-11-13 66 views
8

需要在應用程序中編譯哪些Qt/QML軟件才能調試/配置QML?如何Qt - Qml調試和/或分析?

我目前的應用程序是使用cmake構建,並在嵌入式設備上運行。此外,我開始使用Qt 4.8.3(直到現在4.7.0)。

我想用這些花哨/很酷的功能(對於嵌入式開發人員):

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

我搜索槽qt-project尋求幫助,但什麼是我沒有得到明確當您想要使用自定義構建環境調試/分析遠程應用程序時所需的步驟。

所以,我想知道是否需要以下任何步驟,並且在正面情況下,實際上需要的代碼是什麼。

  • Qt庫./configure特定選項。
  • QtCreator附加/啓動到遠程應用程序的特定選項。
  • Cmake包含最終應用程序可執行文件所需的庫和庫。

歡迎任何幫助,鏈接等。

回答

12

隨着Qt 4.8的這很容易。所有必需的庫現在都是Qt本身的一部分,您不必爲自己的Qt版本構建調試庫。

我正在開發同樣使用CMake構建的Qt/QML桌面應用程序。我不得不完成以下步驟啓用QML調試:

  1. 包括調試使能到我的應用程序的啓動代碼

    #include <QtDeclarative/qdeclarativedebug.h> 
    
        /* [...] */ 
    
        QDeclarativeDebuggingEnabler enabler; 
    
  2. 添加QML_DISABLE_OPTIMIZER=1到執行環境我的應用程序的

    這可以在項目頁面的執行選項卡中的Qt Creator中完成。

  3. 勾選複選框QML調試在執行標籤

    這增加了所需的命令行參數Qt創建者和嵌入在應用

的QML調試器部件之間的通信還發現如果一切順利,應用程序會以調試模式啓動以下輸出:

Qml調試已啓用。只能在安全的環境中使用!
QDeclarativeDebugServer:等待在端口3768連接...
QDeclarativeDebugServer:已建立的連接

之後,我能夠設置斷點和檢查變量。此外,通過分析頁面訪問的分析器剛剛工作。

當你開發一個嵌入式應用程序時,你的情況顯然要複雜一點。

Qt創建者不支持在嵌入式平臺上部署和執行基於CMake的項目。你必須自己做。不要忘了所需的參數傳遞給您的應用程序來配置QML調試:

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

爲Qt Creator的附加爲分析會話使用遠程運行應用程序在「分析」對應的「外部」條目菜單在Qt Creator主菜單中。 「Debug」>「Debug」下的「Connect to Debug-Server」進行調試的同樣選項在哪裏。

+1

我已經成功地在QML分析器上首次看到應用程序數據。我沒有使用第3點,我只是點擊了Analyza-> QML Profiler。現在,第一次測試後,我得到「QDeclarativeDebugServer:另一個客戶端已連接」。這是可以避免的還是我需要重置我的應用程序? – kikeenrique

+0

我自己還沒有看到這個消息,看起來你嘗試調試/配置文件相同的應用程序實例兩次,現在允許。我無法幫助您,因爲這不會發生在我的桌面應用程序中。 – sebasgo

2

這裏是一個「乾淨」的替代@sebasgo's answer,第1項

如果使用QT5與QtQuick2,你只需要包括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宏。

#define QT_DECLARATIVE_DEBUG 
#include <QtDeclarative> 

對於好奇,這裏是一個相關的Qt源,短,不言自明的:

-2

有了Qt 5.1新功能qInstallMessageHandler已添加。 它可以讓你捕捉並記錄錯誤和警告,以便你可以隨意處理它們。

+0

您的鏈接和說明指出它是在QT 5.0中引入的 – kikeenrique

+0

此外,這不適用於QML,無需進一步更改... –

6

我使用的是Qt 5,它變得更加簡單。被要求在我身邊只是這一步做QML分析:

#include <QQmlDebuggingEnabler> 

... 

QQmlDebuggingEnabler enabler; 
+0

我也使用QT 5,但我得到了「沒有這樣的文件或目錄」的錯誤 什麼可能是問題?我應該安裝更多的東西嗎? – MeM

+0

@MeM:很難說這個......我建議你用這個問題和更多的信息開一個新的問題...... –

3

檢查docs都給答案似乎是不必要的。此外,它在發行版中硬編碼調試代碼。我不知道爲什麼QQmlDebuggingEnabler將是必要的,但如果您檢查代碼herehere,您將認識到,QQmlDebuggingEnabler的安裝是而不是必要的。只需包括QQmlDebuggingEnabler並設置QT_QML_DEBUG標誌,例如像這樣(CMake的)

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

然而,根據docsQQmlDebuggingEnabler是沒有必要的。

Furtermore:剖析未優化的代碼是沒有意義的。

對於我來說,將QT_QML_DEBUG設置爲標誌並選中QML調試複選框就足夠了。