2012-11-13 28 views
8

Phần mềm Qt/QML nào cần thiết để biên dịch trong ứng dụng để có thể gỡ lỗi/cấu hình QML?Làm thế nào để Qt - gỡ lỗi Qml và/hoặc lược tả?

Ứng dụng hiện tại của tôi đang xây dựng bằng cách sử dụng cmake và chạy trên thiết bị được nhúng. Hơn nữa, tôi bắt đầu sử dụng Qt 4.8.3 (cho đến bây giờ là 4.7.0).

Tôi muốn sử dụng các/tính năng ưa thích mát mẻ (đối với một nhà phát triển nhúng):

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

Tôi đã tìm kiếm máng qt-project tìm kiếm sự giúp đỡ, nhưng tôi đã không nhận được rõ ràng những gì là các bước cần thiết khi bạn muốn gỡ lỗi/cấu hình một ứng dụng từ xa, với môi trường xây dựng tùy chỉnh.

Vì vậy, tôi muốn biết liệu có cần thực hiện bất kỳ bước nào sau đây hay không và trong trường hợp dương tính, mã thực tế là cần thiết.

  • Thư viện Qt ./configure tùy chọn cụ thể.
  • QtTạo tùy chọn cụ thể để đính kèm/khởi chạy ứng dụng từ xa.
  • Cmake bao gồm và thư viện cần thiết trong ứng dụng thực thi cuối cùng.

Mọi trợ giúp, liên kết, v.v. đều được hoan nghênh.

Trả lời

12

Với Qt 4.8, điều này khá dễ dàng. Tất cả các thư viện cần thiết bây giờ là một phần của chính Qt và bạn không phải tự xây dựng thư viện gỡ lỗi cho phiên bản Qt của mình.

Tôi đang phát triển ứng dụng Qt/QML dành cho máy tính để bàn cũng được tạo bằng CMake. Tôi đã hoàn tất các bước sau để kích hoạt QML gỡ lỗi:

  1. Bao gồm Enabler gỡ lỗi vào mã khởi động ứng dụng của tôi

    #include <QtDeclarative/qdeclarativedebug.h> 
    
        /* [...] */ 
    
        QDeclarativeDebuggingEnabler enabler; 
    
  2. Thêm QML_DISABLE_OPTIMIZER=1 đến môi trường thực thi của ứng dụng của tôi

    Điều này có thể được thực hiện trong Qt Creator trong tab thực thi của trang dự án.

  3. Tick vào hộp kiểm cho QML gỡ lỗi cũng được tìm thấy trong thực hiện tab

    này cho biết thêm các thông số dòng lệnh cần thiết cho giao tiếp giữa Qt Creator và các thành phần debugger QML nhúng trong ứng dụng

Nếu mọi thứ ổn, ứng dụng sẽ chào đón bạn với đầu ra sau nếu bắt đầu ở chế độ gỡ lỗi:

Gỡ lỗi Qml được bật. Chỉ sử dụng điều này trong một môi trường an toàn!
QDeclarativeDebugServer: Đang chờ kết nối trên cổng 3768 ...
QDeclarativeDebugServer: Kết nối thành lập

Sau đó tôi đã có thể đặt breakpoint và kiểm tra các biến.Ngoài ra profiler có thể truy cập thông qua trang phân tích chỉ hoạt động.

Trường hợp của bạn rõ ràng phức tạp hơn một chút khi bạn phát triển một ứng dụng được nhúng.

Trình tạo Qt không hỗ trợ triển khai và thực thi các dự án dựa trên CMake trên nền tảng nhúng. Bạn sẽ phải tự mình làm điều đó. Đừng quên để vượt qua các đối số cần thiết để ứng dụng của bạn để cấu hình gỡ lỗi QML:

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

Chú Qt Creator để một ứng dụng đang chạy từ xa cho việc sử dụng phiên profiling tương ứng mục "bên ngoài" trong "Phân tích" trong menu chính của Qt Creator. Một tùy chọn tương tự để gỡ lỗi với "Kết nối với Debug-Server" trong "Debug"> "Debug" là gì.

+1

Tôi đã xem thành công dữ liệu ứng dụng lần đầu tiên trên hồ sơ QML. Tôi đã không sử dụng điểm 3, tôi chỉ cần nhấp vào Analyza-> QML Profiler. Bây giờ, sau khi thử nghiệm đầu tiên tôi nhận được "QDeclarativeDebugServer: Một khách hàng khác đã được kết nối". Điều này có thể tránh được hay tôi cần phải đặt lại ứng dụng của mình? – kikeenrique

+0

Tôi chưa tự thấy thông báo này, có vẻ như bạn cố gắng thực hiện gỡ lỗi/hồ sơ cùng một cá thể ứng dụng hai lần và bây giờ được cho phép. Tôi không thể giúp bạn ở đó vì điều này không xảy ra với ứng dụng máy tính để bàn của tôi. – sebasgo

2

Đây là một "sạch" để thay thế cho @sebasgo's answer, mục 1.

Nếu bạn đang sử dụng Qt5 với QtQuick2, bạn chỉ cần xác định QT_QML_DEBUG trước bao gồm QtQuick trong một số tập tin (nó không có vấn đề gì tập tin, như miễn là nó là một phần của tệp thực thi). Ví dụ, nó là đủ để bắt đầu main.cpp với bạn dòng:

#define QT_QML_DEBUG 
#include <QtQuick> 

Nó sẽ không làm tổn thương nếu bạn thay vì sử dụng -DQT_QML_DEBUG cờ biên dịch (ví dụ: thông qua qmake DEFINES hoặc cmake add_definitions chỉ thị), có thể chỉ trong debug xây dựng.

Nếu bạn gặp sự cố với QtQuick1 cũ (trong Qt5 hoặc Qt4), hãy sử dụng macro QT_DECLARATIVE_DEBUG thay thế, ví dụ:

#define QT_DECLARATIVE_DEBUG 
#include <QtDeclarative> 

Đối với người hiếu, đây là một nguồn Qt có liên quan, ngắn và tự giải thích:

-2

Với Qt 5.1 mới chức năng qInstallMessageHandler đã được thêm vào. Nó sẽ cho phép bạn nắm bắt, và đăng nhập, lỗi và cảnh báo để bạn có thể đối phó với họ như bạn muốn.

+0

Liên kết và mô tả của bạn tuyên bố rằng nó đã được giới thiệu trong QT 5.0 – kikeenrique

+0

Ngoài ra, điều này không hoạt động cho QML mà không có thêm thay đổi ... –

6

Tôi đang sử dụng Qt 5 và thậm chí còn dễ dàng hơn. Chỉ cần một bước này về phía tôi để làm hồ sơ QML:

#include <QQmlDebuggingEnabler> 

... 

QQmlDebuggingEnabler enabler; 
+0

Tôi cũng sử dụng QT 5 nhưng tôi gặp lỗi "không có tệp hoặc thư mục" Điều gì có thể là vấn đề? Tôi có nên cài thêm cái gì nữa không? – MeM

+0

@MeM: Rất khó để nói chỉ từ điều đó ... Tôi đề nghị bạn mở một câu hỏi mới với vấn đề đó và nhiều thông tin hơn ... –

3

Kiểm tra tất cả các câu trả lời được cho là dường như không cần thiết. Hơn nữa nó mã hóa mã gỡ lỗi trong bản phát hành. Tôi không biết tại sao cần phải có QQmlDebuggingEnabler nhưng nếu bạn kiểm tra mã herehere, bạn sẽ nhận ra rằng việc instatiation QQmlDebuggingEnablerkhông cần thiết. Chỉ cần bao gồm QQmlDebuggingEnabler và đặt cờ QT_QML_DEBUG ví dụ: như thế này (CMake)

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

Tuy nhiên theo docsQQmlDebuggingEnabler là không cần thiết.

Furtermore: lược tả mã chưa được tối ưu hóa sẽ không có ý nghĩa.

Để tôi đặt QT_QML_DEBUG làm cờ và chọn hộp kiểm để gỡ lỗi QML là đủ.

Các vấn đề liên quan