summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes3
-rw-r--r--.tag1
-rw-r--r--dist/changes-4.11.1.md55
-rw-r--r--doc/src/analyze/creator-ctf-visualizer.qdoc129
-rw-r--r--doc/src/qtquick/qtquick-profiler.qdoc7
-rw-r--r--share/qtcreator/debugger/dumper.py2
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp2
-rw-r--r--src/plugins/android/androiddeployqtstep.cpp14
-rw-r--r--src/plugins/ios/iosdevice.cpp43
-rw-r--r--src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp6
-rw-r--r--src/plugins/qtsupport/qtcreator_tutorials.xml8
12 files changed, 236 insertions, 36 deletions
diff --git a/.gitattributes b/.gitattributes
index e87bab18ac..0d3537f28e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,4 @@
dist/clang/patches/*.patch -diff -merge -text
+.tag export-subst
+.gitattributes export-ignore
+.gitignore export-ignore
diff --git a/.tag b/.tag
new file mode 100644
index 0000000000..6828f88dcb
--- /dev/null
+++ b/.tag
@@ -0,0 +1 @@
+$Format:%H$
diff --git a/dist/changes-4.11.1.md b/dist/changes-4.11.1.md
index f2718ca6bc..8f2635897b 100644
--- a/dist/changes-4.11.1.md
+++ b/dist/changes-4.11.1.md
@@ -1,4 +1,5 @@
-# Qt Creator 4.11.1
+Qt Creator 4.11.1
+=================
Qt Creator version 4.11.1 contains bug fixes.
@@ -9,7 +10,8 @@ you can check out from the public Git repository. For example:
git clone git://code.qt.io/qt-creator/qt-creator.git
git log --cherry-pick --pretty=oneline origin/v4.11.0..v4.11.1
-## Editing
+Editing
+-------
* Fixed `Visualize Whitespace` for editors without specialized highlighter definition
(QTCREATORBUG-23040)
@@ -18,29 +20,42 @@ you can check out from the public Git repository. For example:
* Fixed wrong warnings about C++98 incompatibility with MSVC (QTCREATORBUG-23118)
* Fixed accidentally added internal include paths from GCC (QTCREATORBUG-23330)
+* Fixed `Convert to Stack Variable` and `Convert to Pointer` (QTCREATORBUG-23181)
### FakeVim
* Fixed goto next and previous split (QTCREATORBUG-22397)
* Fixed indentation of continuation lines (QTCREATORBUG-20876)
-## Projects
+Projects
+--------
* Fixed crash when closing application output
+* Fixed crash when compiler detection fails (QTCREATORBUG-23442)
### CMake
* Fixed subdirectory structure in project tree (QTCREATORBUG-23372)
-## Qt Quick Designer
+Debugging
+---------
+
+* Fixed crash with `Switch to previous mode on debugger exit` when debugging fails
+ (QTCREATORBUG-23415)
+* Fixed high CPU usage with LLDB (QTCREATORBUG-23311)
+
+Qt Quick Designer
+-----------------
* Fixed removing single signals from Connection (QDS-1333)
-## Test Integration
+Test Integration
+----------------
* Fixed stopping tests when debugging (QTCREATORBUG-23298)
-## Platforms
+Platforms
+---------
### Windows
@@ -54,4 +69,30 @@ you can check out from the public Git repository. For example:
* Fixed deployment of Qt examples (QTCREATORBUG-22592)
-## Credits for these changes go to:
+Credits for these changes go to:
+--------------------------------
+
+Aleksei German
+Alessandro Portale
+Andre Hartmann
+Andrzej Ostruszka
+André Pönitz
+BogDan Vatra
+Christian Kandeler
+Christian Stenger
+Cristian Adam
+David Schulz
+Eike Ziller
+Friedemann Kleint
+Henning Gruendl
+Jaroslaw Kobus
+Leena Miettinen
+Mahmoud Badri
+Marius Sincovici
+Miikka Heikkinen
+Nikolai Kosjar
+Richard Weickelt
+Robert Löhning
+Thomas Hartmann
+Tim Jenssen
+Tobias Hunger
diff --git a/doc/src/analyze/creator-ctf-visualizer.qdoc b/doc/src/analyze/creator-ctf-visualizer.qdoc
index 20362accbe..e9680897d3 100644
--- a/doc/src/analyze/creator-ctf-visualizer.qdoc
+++ b/doc/src/analyze/creator-ctf-visualizer.qdoc
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -37,6 +37,19 @@
\title Visualizing Chrome Trace Events
+ You can use \e {full stack tracing} to trace from the top level QML or
+ JavaScript down to the C++ and all the way to the kernel space. This
+ enables you to measure the performance of an application and to check
+ whether it is CPU or I/O bound or influenced by other applications
+ running on the same system. Tracing provides insight into what a system is
+ doing and why an application is performing in a particular way. It indicates
+ how the hardware is utilized and what the kernel and application are doing.
+
+ Tracing information can also provide you additional insight into the data
+ collected by \l{Profiling QML Applications}{QML Profiler}. For example, you
+ could check why a trivial binding evaluation is taking so long. This might
+ be caused by C++ being executed or the disk I/O being slow.
+
Several tracing tools (such as \c {chrome://about}) can generate information
about Chrome trace events in Chrome Trace Format (CTF). You can open CTF
files in \QC for viewing. This is especially useful when viewing trace files
@@ -110,4 +123,118 @@
stack (called \c self). This allows you to examine which functions you need
to optimize. A high number of occurrences might indicate that a function is
triggered unnecessarily or takes very long to execute.
+
+ \section1 Collecting LTTng Data
+
+ LTTng is a tracing toolkit for Linux that you can apply on embedded Linux
+ systems to find out how to optimize the startup time of an application.
+
+ Since Qt 5.13, Qt provides a set of kernel trace points and a tracing
+ subsystem for custom user space trace points.
+
+ \section2 Configuring the Kernel
+
+ To use LTTng, you have to set the following configuration options for the
+ kernel before building it:
+
+ \list
+ \li \c CONFIG_HIGH_RES_TIMERS
+ \li \c CONFIG_KALLSYMS
+ \li \c CONFIG_MODULES
+ \li \c CONFIG_TRACEPOINTS
+ \endlist
+
+ We recommend that you set the following additional options:
+
+ \list
+ \li \c CONFIG_EVENT_TRACING
+ \li \c CONFIG_HAVE_SYSCALL_TRACEPOINTS
+ \li \c CONFIG_KALLSYMS_ALL
+ \endlist
+
+ In Yocto, you can activate the above options in \uicontrol Menu >
+ \uicontrol Config > \uicontrol {Kernel Hacking} > \uicontrol Tracers.
+
+ \section2 Installing LTTng
+
+ After you build the kernel and deploy it on your device, you'll need to
+ install the following LTTng packages on your device:
+
+ \list
+ \li \c lttng-tools to control the tracing session
+ \li \c lttng-modules for kernel trace points
+ \li \c lttng-ust for user space trace points
+ \endlist
+
+ In Yocto, you just need to enable
+ \c {EXTRA_IMAGE_FEATURES += "tools profile"}.
+
+ \section2 Building Qt with Tracepoints
+
+ Trace points are continuously being added to Qt versions. To use them, you
+ need to build Qt yourself with the \c {configure -trace lttng} option.
+
+ \section2 Recording Events
+
+ To create a session, you call the \c {lttng create} command. Then you
+ call \c {lttng enable-channel kernel -k} to enable the kernel channel.
+ Within the kernel channel, you specify the appropriate trace points as
+ \c {kernel_events} and call \c {lttng enable-event} to enable them.
+ Finally, you call \c {lttng start} to start tracing.
+
+ You call \c {lttng stop} to stop tracing. You can use \c sleep to set the
+ length of the session. After stopping, you can call \c {lttng destroy} to
+ destroy the session.
+
+ You can write and run scripts that contain the above commands to start and
+ stop full-stack tracing. You can use \c systemd to execute the scripts.
+
+ \section2 Enabling Trace Points
+
+ Data is recorded according to the trace points that you enable in the LTTng
+ session. Usually, it is useful to enable scheduler switch, syscall, and Qt
+ trace points.
+
+ \section3 Scheduler Switch Trace Points
+
+ Scheduler switch trace points are reached when an application is switched
+ out due to predemption, for example, when another process gets the chance
+ to run on the CPU core. Enable scheduler schwitch trace points to record
+ the thread that is currently running and the process it belongs to, as
+ well as the time when the process started and stopped.
+
+ \section3 Syscall Trace Points
+
+ Syscall trace points help you to understand why a scheduler switch happened.
+ The following are examples of syscalls to trace:
+
+ \list
+ \li \c openat and \c close map file descriptors to file names
+ \li \c mmap maps page faults to files
+ \li \c read and \c write are triggered by I/O operations
+ \li \c nanosleep, \c futex, and \c poll explain scheduler switches
+ \li \c ioctl controls the GPU and display
+ \endlist
+
+ \section1 Converting LTTng Data to CTF
+
+ The \l{https://github.com/KDAB/ctf2ctf}{ctf2ctf} tool uses \c babeltrace to
+ parse binary Common Trace Format (CTF) and converts it to Chrome Trace
+ Format (CTF). It performs the following custom tasks to make the recording
+ more human-readable:
+
+ \list
+ \li Map file descriptors to file names
+ \li Map page faults to file names
+ \li Annotate interrupts and block devices with names
+ \li Convert UTF-16 QString data to UTF-8 strings
+ \li Count memory page allocations
+ \endlist
+
+ To generate JSON files that contain the trace data in Chrome Trace Format,
+ enter the following command on the command line:
+
+ \code
+ ctf2ctf -o trace.json path/to/lttng trace/
+ \endcode
*/
diff --git a/doc/src/qtquick/qtquick-profiler.qdoc b/doc/src/qtquick/qtquick-profiler.qdoc
index fef88195d7..7b8936b911 100644
--- a/doc/src/qtquick/qtquick-profiler.qdoc
+++ b/doc/src/qtquick/qtquick-profiler.qdoc
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -74,6 +74,11 @@
large, unexplained gaps in the timeline, check your custom QQuickItem
implementations. You can use \l{Using Valgrind Code Analysis Tools}
{Valgrind} or other general purpose profilers to analyze C++ code.
+
+ You can use \e {full stack tracing} to trace from the top level QML or
+ JavaScript down to the C++ and all the way to the kernel space. You can
+ view the collected data in the \l{Visualizing Chrome Trace Events}
+ {Chrome Trace Format Viewer}.
\endif
\section1 Using QML Profiler
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 3ebdedbd2e..8ce967d3a5 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -3400,7 +3400,7 @@ class DumperBase:
return res
return thing
if len(fields) != len(result):
- error('STRUCT ERROR: %s %s' (fields, result))
+ error('STRUCT ERROR: %s %s' % (fields, result))
return tuple(map(structFixer, fields, result))
def checkPointer(self, p, align = 1):
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index 62e597eb5b..501145166c 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -112,7 +112,7 @@ bool Qt5InformationNodeInstanceServer::eventFilter(QObject *, QEvent *event)
case QEvent::KeyPress: {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
- QPair<int, int> data = {keyEvent->key(), keyEvent->modifiers()};
+ QPair<int, int> data = {keyEvent->key(), int(keyEvent->modifiers())};
nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::KeyPressed,
QVariant::fromValue(data)});
} break;
diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp
index 4d6a84e72c..55d23b095a 100644
--- a/src/plugins/android/androiddeployqtstep.cpp
+++ b/src/plugins/android/androiddeployqtstep.cpp
@@ -141,7 +141,8 @@ AndroidDeployQtStep::AndroidDeployQtStep(BuildStepList *parent, Core::Id id)
: BuildStep(parent, id)
{
setImmutable(true);
- m_uninstallPreviousPackage = QtSupport::QtKitAspect::qtVersion(target()->kit())->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0);
+ const QtSupport::BaseQtVersion * const qt = QtSupport::QtKitAspect::qtVersion(target()->kit());
+ m_uninstallPreviousPackage = qt && qt->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0);
//: AndroidDeployQtStep default display name
setDefaultDisplayName(tr("Deploy to Android device"));
@@ -161,6 +162,10 @@ Core::Id AndroidDeployQtStep::stepId()
bool AndroidDeployQtStep::init()
{
+ QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target()->kit());
+ if (!version) // TODO: Add error message
+ return false;
+
m_androiddeployqtArgs = CommandLine();
m_androidABIs = AndroidManager::applicationAbis(target());
@@ -210,10 +215,6 @@ bool AndroidDeployQtStep::init()
emit addOutput(tr("Deploying to %1").arg(m_serialNumber), OutputFormat::Stdout);
- QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target()->kit());
- if (!version)
- return false;
-
m_uninstallPreviousPackageRun = m_uninstallPreviousPackage;
if (m_uninstallPreviousPackageRun)
m_manifestName = AndroidManager::manifestPath(target());
@@ -585,7 +586,8 @@ void AndroidDeployQtStep::setUninstallPreviousPackage(bool uninstall)
AndroidDeployQtStep::UninstallType AndroidDeployQtStep::uninstallPreviousPackage()
{
- if (QtSupport::QtKitAspect::qtVersion(target()->kit())->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0))
+ const QtSupport::BaseQtVersion * const qt = QtSupport::QtKitAspect::qtVersion(target()->kit());
+ if (qt && qt->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0))
return ForceUnintall;
return m_uninstallPreviousPackage ? Uninstall : Keep;
}
diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp
index 38d48e25ed..a9c9e32162 100644
--- a/src/plugins/ios/iosdevice.cpp
+++ b/src/plugins/ios/iosdevice.cpp
@@ -42,6 +42,16 @@
#include <IOKit/IOKitLib.h>
#include <IOKit/usb/IOUSBLib.h>
#include <CoreFoundation/CoreFoundation.h>
+
+// Work around issue with not being able to retrieve USB serial number.
+// See QTCREATORBUG-23460.
+// For an unclear reason USBSpec.h in macOS SDK 10.15 uses a different value if
+// MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_14, which just does not work.
+#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_14
+#undef kUSBSerialNumberString
+#define kUSBSerialNumberString "USB Serial Number"
+#endif
+
#endif
#include <exception>
@@ -356,9 +366,14 @@ void deviceConnectedCallback(void *refCon, io_iterator_t iterator)
usbDevice,
CFSTR(kUSBSerialNumberString),
kCFAllocatorDefault, 0));
- QString uid = CFStringRef2QString(cfUid);
- CFRelease(cfUid);
- IosDeviceManager::instance()->deviceConnected(uid, name);
+ if (cfUid) {
+ QString uid = CFStringRef2QString(cfUid);
+ CFRelease(cfUid);
+ qCDebug(detectLog) << "device UID is" << uid;
+ IosDeviceManager::instance()->deviceConnected(uid, name);
+ } else {
+ qCDebug(detectLog) << "failed to retrieve device's UID";
+ }
// Done with this USB device; release the reference added by IOIteratorNext
kr = IOObjectRelease(usbDevice);
@@ -385,18 +400,22 @@ void deviceDisconnectedCallback(void *refCon, io_iterator_t iterator)
// Get the USB device's name.
kr = IORegistryEntryGetName(usbDevice, deviceName);
- if (KERN_SUCCESS != kr)
- deviceName[0] = '\0';
- qCDebug(detectLog) << "ios device " << deviceName << " in deviceDisconnectedCallback";
-
- {
- CFStringRef cfUid = static_cast<CFStringRef>(IORegistryEntryCreateCFProperty(
- usbDevice,
- CFSTR(kUSBSerialNumberString),
- kCFAllocatorDefault, 0));
+ QString name;
+ if (KERN_SUCCESS == kr)
+ name = QString::fromLocal8Bit(deviceName);
+ qCDebug(detectLog) << "ios device " << name << " in deviceDisconnectedCallback";
+
+ CFStringRef cfUid = static_cast<CFStringRef>(
+ IORegistryEntryCreateCFProperty(usbDevice,
+ CFSTR(kUSBSerialNumberString),
+ kCFAllocatorDefault,
+ 0));
+ if (cfUid) {
QString uid = CFStringRef2QString(cfUid);
CFRelease(cfUid);
IosDeviceManager::instance()->deviceDisconnected(uid);
+ } else {
+ qCDebug(detectLog) << "failed to retrieve device's UID";
}
// Done with this USB device; release the reference added by IOIteratorNext
diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp
index 56fd1b9503..786b0cf019 100644
--- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp
+++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp
@@ -28,6 +28,7 @@
#include "idevice.h"
#include "../runcontrol.h"
+#include <coreplugin/icore.h>
#include <ssh/sshconnection.h>
#include <ssh/sshconnectionmanager.h>
#include <ssh/sshremoteprocess.h>
@@ -201,6 +202,7 @@ void SshDeviceProcess::handleConnected()
connect(&d->consoleProcess, &ConsoleProcess::stubStopped,
this, [this] { handleProcessFinished(d->consoleProcess.errorString()); });
d->consoleProcess.setAbortOnMetaChars(false);
+ d->consoleProcess.setSettings(Core::ICore::settings());
d->consoleProcess.setCommand(d->process->fullLocalCommandLine());
d->consoleProcess.start();
} else {
diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
index ba43dc0543..f930d1d7af 100644
--- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
+++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
@@ -293,13 +293,13 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor
data.insert("Android.ndk.ndkDir", ndkDir);
}
}
- data.remove(QBS_ARCHITECTURES);
- data.remove(QBS_ARCHITECTURE);
QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(k);
if (qtVersion) {
+ data.remove(QBS_ARCHITECTURES);
+ data.remove(QBS_ARCHITECTURE);
QStringList abis;
for (const auto &abi : qtVersion->qtAbis())
- abis << abi.param();
+ abis << architecture(abi);
if (abis.size() == 1)
data.insert(QLatin1String(QBS_ARCHITECTURE), abis.first());
else
diff --git a/src/plugins/qtsupport/qtcreator_tutorials.xml b/src/plugins/qtsupport/qtcreator_tutorials.xml
index 4a54c4c274..a694d4cd6f 100644
--- a/src/plugins/qtsupport/qtcreator_tutorials.xml
+++ b/src/plugins/qtsupport/qtcreator_tutorials.xml
@@ -9,7 +9,7 @@
<description><![CDATA[Using Qt Creator to create a small Qt application, Text Finder.]]></description>
<tags>qt creator,qt designer,widgets,c++,text,help</tags>
</tutorial>
- <tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/qtwidgets-tutorials-notepad-example.html" projectPath="" name="Help: Getting Started Programming with Qt Widgets">
+ <tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtwidgets/qtwidgets-tutorials-notepad-example.html" projectPath="" name="Help: Getting Started Programming with Qt Widgets">
<description><![CDATA[Developing Qt applications using C++ and the Qt Widgets module.]]></description>
<tags>qt,qt creator,qt designer,widgets,c++,help</tags>
</tutorial>
@@ -21,9 +21,9 @@
<description><![CDATA[Developing Qt Quick applications for Android and iOS devices using Qt Quick Controls.]]></description>
<tags>qt creator,qt quick designer,qml,android,ios,controls,help</tags>
</tutorial>
- <tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/gettingstartedqml.html" projectPath="" name="Help: Getting Started Programming with Qt Quick">
- <description><![CDATA[Developing Qt Quick applications using QML and C++.]]></description>
- <tags>qt quick,qml,c++,help</tags>
+ <tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/qtdoc-tutorials-alarms-example.html" projectPath="" name="Help: Getting Started Programming with Qt Quick">
+ <description><![CDATA[Developing Qt Quick applications using Qt Quick and Qt Quick Controls.]]></description>
+ <tags>qt quick,controls,tumbler,help</tags>
</tutorial>
<tutorial imageUrl=":qtsupport/images/icons/videotutorialicon.png" difficulty="" projectPath="" name="Online: Digital Instrument Cluster with Qt Quick Designer and Qt Safe Renderer" isVideo="true" videoUrl="https://www.youtube.com/watch?v=9RxxsOCeZHk" videoLength="4:06">