Fehlerbehebung bei QML-Anwendungen
Wenn Sie eine Anwendung mit QML entwickeln, gibt es viele Möglichkeiten, mögliche Probleme zu beheben, auf die Sie stoßen könnten. In den folgenden Abschnitten werden die verfügbaren Debugging-Tools und deren Verwendung beschrieben.
Konsolen-API
| Funktion | Beschreibung |
|---|---|
| Protokoll | Verwenden Sie „ console.log “, „ console.debug “, „ console.info “, „ console.warn “ oder „ console.error “, um Debugging-Informationen auf der Konsole auszugeben.Beispiel: Die Ausgabe wird mithilfe der Methoden ` qCDebug`, ` qCWarning` oder ` qCCritical ` in C++ generiert, wobei je nach Art der Datei, die die Protokollierung durchführt, die Kategorie ` Siehe auch „Debugging-Techniken“. |
| Assert | console.assert prüft, ob ein Ausdruck wahr ist. Ist dies nicht der Fall, schreibt es eine optionale Meldung an die Konsole und gibt den Stack-Trace aus.Beispiel: |
| Timer | console.time und ` console.timeEnd ` protokollieren die Zeit (in Millisekunden), die zwischen den Aufrufen verstrichen ist. Beide nehmen ein String-Argument entgegen, das die Messung identifiziert.Beispiel: |
| `Trace` | console.trace gibt den Stack-Trace der JavaScript-Ausführung an der Stelle aus, an der die Funktion aufgerufen wurde. Diese Stack-Trace-Informationen enthalten den Funktionsnamen, den Dateinamen, die Zeilennummer und die Spaltennummer. Der Stack-Trace ist auf die letzten 10 Stack-Frames beschränkt. |
| „Count“ | console.count gibt die aktuelle Anzahl der Ausführungen eines bestimmten Codeabschnitts zusammen mit einer Meldung aus.Beispiel: Das obige Codebeispiel gibt bei jeder Ausführung von ` |
| „Profile“ | console.profile aktiviert die QML Profiler und JavaScript-Profiler. Verschachtelte Aufrufe werden nicht unterstützt und es wird eine Warnung in der Konsole ausgegeben. |
| ProfileEnd | console.profileEnd deaktiviert die QML Profiler und JavaScript-Profiler. Wird diese Funktion aufgerufen, ohne dass zuvor console.profile aufgerufen wurde, wird eine Warnung in der Konsole ausgegeben. Vor diesem Aufruf muss ein Profiling-Client angehängt werden, um die Profiling-Daten zu empfangen und zu speichern.Beispiel: |
| „Exception“ | console.exception gibt eine Fehlermeldung aus. Die Funktion verhält sich wie „ console.error “, erfordert jedoch mindestens ein Argument und gibt zusätzlich einen Stack-Trace der JavaScript-Ausführung an der Stelle aus, an der sie aufgerufen wird. |
Alternativ kann ein ` logging category ` als erstes Argument an jede dieser „ console “-Funktionen übergeben werden. Weitere Details findest du unter LoggingCategory.
Debugging von Modulimporten
Setzen Sie die Umgebungsvariable ` QML_IMPORT_TRACE `, um die Debug-Ausgabe der Import-Lademekanismen von QML zu aktivieren.
Beispielsweise für eine einfache QML-Datei wie diese:
import QtQuick
Rectangle { width: 100; height: 100 }Wenn Sie „ QML_IMPORT_TRACE=1 “ setzen, bevor Sie das „QML Runtime “-Tool oder Ihre QML-C++-Anwendung ausführen, sehen Sie eine Ausgabe, die in etwa wie folgt aussieht:
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-Debugging-Infrastruktur
Das Qt Qml Modul bietet Dienste zum Debuggen, Überprüfen und Profiling von Anwendungen über einen TCP-Port oder einen lokalen Socket.
Hinweis: Die „ qmltooling “-Plugins, die für das Debuggen und Profiling von QML-Anwendungen auf Geräten erforderlich sind, werden bei der Qt-Installation automatisch installiert. Sie müssen auf den Geräten bereitgestellt werden, damit das Debuggen und Profiling funktionieren.
Aktivieren der Infrastruktur
Wenn Sie Ihre Anwendung kompilieren, müssen Sie die Debugging-Infrastruktur explizit aktivieren.
Wenn Sie CMake verwenden, können Sie „ -DCMAKE_CXX_FLAGS_INIT=-DQT_QML_DEBUG “ als Argument an „ cmake “ in der Befehlszeile übergeben, um die Infrastruktur nur für einen bestimmten Build zu aktivieren. Sie können sie auch dauerhaft in Ihrer „CMakeLists.txt“-Datei aktivieren, indem Sie den folgenden Codeausschnitt hinzufügen:
qt_add_executable(MyApp
...
)
target_compile_definitions(MyApp PRIVATE QT_QML_DEBUG)Wenn Sie qmake verwenden, können Sie die Konfigurationsparameter „ CONFIG+=qml_debug “ zur Projektdatei „ .pro “ hinzufügen oder sie als Argument über die Befehlszeile übergeben.
Wenn Sie ein anderes Build-System verwenden, müssen Sie die Definition „ QT_QML_DEBUG “ über die Mittel des jeweiligen Build-Systems an den Compiler übergeben.
Hinweis: Die Aktivierung der Debugging-Infrastruktur kann die Integrität Ihrer Anwendung und Ihres Systems gefährden. Sie sollten sie daher nur in einer kontrollierten Umgebung aktivieren. Wenn die Infrastruktur aktiviert ist, zeigt die Anwendung die folgende Warnung an:
QML debugging is enabled. Only use this in a safe environment.
Anwendungen starten
Um das Debuggen zu aktivieren – entweder von Beginn an oder um später einen Debugger anzuschließen – starten Sie die Anwendung mit den folgenden Argumenten:
-qmljsdebugger=port:<port_from>[,port_to][,host:<ip address>][,block][,file:<local socket>][,services:<comma-separated list of services to enable>]
Dabei gilt:
- das obligatorische Argument „
port_from“ gibt entweder den Debugging-Port oder, wenn „port_to“ angegeben ist, den Startport eines Portbereichs an - die optionale Angabe „
ip address“ die IP-Adresse des Hosts angibt, auf dem die Anwendung ausgeführt wird - das optionale „
block“ verhindert, dass die Anwendung ausgeführt wird, bis der Debug-Client eine Verbindung zum Server herstellt - Der optionale Parameter „
file“ gibt den lokalen Socket an. - Die optionale Angabe „
services“ legt fest, welche Dienste aktiviert werden sollen; standardmäßig werden alle gefundenen Dienste aktiviert. Beachten Sie, dass der Dienst „v4 debug“ das JIT deaktiviert.
Nachdem die Anwendung erfolgreich gestartet wurde, zeigt sie die folgende Meldung an:
QML Debugger: Waiting for connection on port <port_number>
oder
QML Debugger: Connecting to socket at <file>
Verbindung zu Anwendungen herstellen
Wenn die Anwendung läuft, kann eine IDE oder ein Tool, das das Binärprotokoll implementiert, eine Verbindung zum offenen Port herstellen.
Debugging mit Qt Creator
Qt Creator nutzt die Debugging-Infrastruktur, um QML-Anwendungen sowohl auf dem Desktop als auch auf Remote-Geräten zu debuggen, zu untersuchen und zu profilieren. „ Qt Creator “ bietet integrierte Clients zum Debuggen von JavaScript, zum Untersuchen des Objektbaums und zum Profilieren der Aktivitäten einer QML-Engine. Weitere Informationen finden Sie unter Qt Creator: Debugging von „ Qt Quick “-Projekten.
Das Debuggen mit Qt Extension for Visual Studio Code
Qt Extension for Visual Studio Code bietet integrierte Clients zum Debuggen von JavaScript und zum Profiling der Aktivitäten der QML-Engine. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Debuggen von „ Qt Quick “-Anwendungen.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.