forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.7'
Change-Id: I15962a85b0cc37c5a00e15ef7eac0445aad6c295
This commit is contained in:
@@ -8,7 +8,7 @@ The standalone binary packages support the following platforms:
|
|||||||
|
|
||||||
* Windows 7 or later
|
* Windows 7 or later
|
||||||
* (K)Ubuntu Linux 16.04 (64-bit) or later
|
* (K)Ubuntu Linux 16.04 (64-bit) or later
|
||||||
* macOS 10.10 or later
|
* macOS 10.11 or later
|
||||||
|
|
||||||
## Compiling Qt Creator
|
## Compiling Qt Creator
|
||||||
|
|
||||||
|
66
dist/changes-4.7.1.md
vendored
Normal file
66
dist/changes-4.7.1.md
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
Qt Creator version 4.7.1 contains bug fixes.
|
||||||
|
|
||||||
|
The most important changes are listed in this document. For a complete
|
||||||
|
list of changes, see the Git log for the Qt Creator sources that
|
||||||
|
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.7.0..v4.7.1
|
||||||
|
|
||||||
|
Editing
|
||||||
|
|
||||||
|
* Fixed that generic highlighting could use unreadable colors
|
||||||
|
(QTCREATORBUG-20919)
|
||||||
|
|
||||||
|
Qbs Projects
|
||||||
|
|
||||||
|
* Fixed C++ version passed to code model (QTCREATORBUG-20909)
|
||||||
|
|
||||||
|
C++ Support
|
||||||
|
|
||||||
|
* Clang Code Model
|
||||||
|
* Fixed include order for Clang headers
|
||||||
|
|
||||||
|
Debugging
|
||||||
|
|
||||||
|
* Fixed remote debugging command line argument (QTCREATORBUG-20928)
|
||||||
|
* GDB
|
||||||
|
* Fixed GDB built-in pretty printer handling (QTCREATORBUG-20770)
|
||||||
|
* CDB
|
||||||
|
* Fixed pretty printing of enums
|
||||||
|
* QML
|
||||||
|
* Fixed re-enabling breakpoints (QTCREATORBUG-20795)
|
||||||
|
* Fixed `Attach to QML Port` (QTCREATORBUG-20168)
|
||||||
|
|
||||||
|
Platform Specific
|
||||||
|
|
||||||
|
Windows
|
||||||
|
|
||||||
|
* Improved resource consumption of MSVC detection, which prompted some
|
||||||
|
Anti-Virus software to block Qt Creator (QTCREATORBUG-20829)
|
||||||
|
* Fixed that Qt Creator forced use of ANGLE on user applications
|
||||||
|
(QTCREATORBUG-20808)
|
||||||
|
* Fixed MSVC toolchain detection for Windows SKD 7 (QTCREATORBUG-18328)
|
||||||
|
|
||||||
|
Remote Linux
|
||||||
|
|
||||||
|
* Switched SSH support to use Botan 2 (QTCREATORBUG-18802)
|
||||||
|
|
||||||
|
Credits for these changes go to:
|
||||||
|
Andre Hartmann
|
||||||
|
André Pönitz
|
||||||
|
Christian Kandeler
|
||||||
|
Christian Stenger
|
||||||
|
David Schulz
|
||||||
|
Eike Ziller
|
||||||
|
Hannes Domani
|
||||||
|
Ivan Donchevskii
|
||||||
|
Leena Miettinen
|
||||||
|
Marco Benelli
|
||||||
|
Orgad Shaneh
|
||||||
|
Robert Löhning
|
||||||
|
scootergrisen
|
||||||
|
Sergey Belyashov
|
||||||
|
Thomas Hartmann
|
||||||
|
Tobias Hunger
|
||||||
|
Ulf Hermann
|
@@ -51,6 +51,8 @@ include(macros.qdocconf)
|
|||||||
include(qt-cpp-ignore.qdocconf)
|
include(qt-cpp-ignore.qdocconf)
|
||||||
include(qt-defines.qdocconf)
|
include(qt-defines.qdocconf)
|
||||||
|
|
||||||
|
defines += qtcreator
|
||||||
|
|
||||||
sources.fileextensions = "*.qdoc"
|
sources.fileextensions = "*.qdoc"
|
||||||
|
|
||||||
qhp.projects = QtCreator
|
qhp.projects = QtCreator
|
||||||
|
@@ -26,9 +26,13 @@
|
|||||||
/*!
|
/*!
|
||||||
|
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-connecting-mobile.html
|
|
||||||
\page creator-developing-android.html
|
\page creator-developing-android.html
|
||||||
|
\previouspage creator-connecting-mobile.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\nextpage creator-developing-generic-linux.html
|
||||||
|
\else
|
||||||
\nextpage creator-developing-baremetal.html
|
\nextpage creator-developing-baremetal.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Connecting Android Devices
|
\title Connecting Android Devices
|
||||||
|
|
||||||
|
361
doc/src/debugger/creator-debugger-common.qdocinc
Normal file
361
doc/src/debugger/creator-debugger-common.qdocinc
Normal file
@@ -0,0 +1,361 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Creator documentation.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Free Documentation License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Free
|
||||||
|
** Documentation License version 1.3 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file included in the packaging of
|
||||||
|
** this file. Please review the following information to ensure
|
||||||
|
** the GNU Free Documentation License version 1.3 requirements
|
||||||
|
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
|
||||||
|
//! [debugger-breakpoints]
|
||||||
|
|
||||||
|
\section1 Setting Breakpoints
|
||||||
|
|
||||||
|
A breakpoint represents a position or sets of positions in the code that,
|
||||||
|
when executed, interrupts the program being debugged and passes the control
|
||||||
|
to you. You can then examine the state of the interrupted program, or
|
||||||
|
continue execution either line-by-line or continuously.
|
||||||
|
|
||||||
|
\QC shows breakpoints in the \uicontrol Breakpoints view which is enabled
|
||||||
|
by default. The \uicontrol Breakpoints view is also accessible when the
|
||||||
|
debugger and the program being debugged is not running.
|
||||||
|
|
||||||
|
\image qtcreator-debug-breakpoints.png "Breakpoints view"
|
||||||
|
|
||||||
|
You can associate breakpoints with:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li Source code files and lines
|
||||||
|
|
||||||
|
\li Functions
|
||||||
|
|
||||||
|
\li Addresses
|
||||||
|
|
||||||
|
\li Throwing and catching exceptions
|
||||||
|
|
||||||
|
\li Executing and forking processes
|
||||||
|
|
||||||
|
\li Executing some system calls
|
||||||
|
|
||||||
|
\li Changes in a block of memory at a particular address when a
|
||||||
|
program is running
|
||||||
|
|
||||||
|
\li Emitting QML signals
|
||||||
|
|
||||||
|
\li Throwing JavaScript exceptions
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
The interruption of a program by a breakpoint can be restricted with certain
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
You can set and delete breakpoints before the program starts running or
|
||||||
|
while it is running under the debugger's control. Breakpoints are saved
|
||||||
|
together with a session.
|
||||||
|
|
||||||
|
\section2 Adding Breakpoints
|
||||||
|
|
||||||
|
To add breakpoints:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\li Add a new breakpoint in one of the following ways:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li In the code editor, click the left margin or press \key F9
|
||||||
|
(\key F8 for \macos) at a particular line you want the
|
||||||
|
program to stop.
|
||||||
|
|
||||||
|
\li In the \uicontrol Breakpoints view, double-click in the empty
|
||||||
|
part of the view.
|
||||||
|
|
||||||
|
\li In the \uicontrol Breakpoints view, select
|
||||||
|
\uicontrol {Add Breakpoint} in the context menu.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\li In the \uicontrol {Breakpoint type} field, select the location in the
|
||||||
|
program code where you want the program to stop. The other options
|
||||||
|
to specify depend on the selected location.
|
||||||
|
|
||||||
|
\image qtcreator-add-breakpoint.png "Add Breakpoints" dialog
|
||||||
|
|
||||||
|
\li In the \uicontrol Condition field, set the condition to be evaluated
|
||||||
|
before stopping at the breakpoint if the condition evaluates as
|
||||||
|
true.
|
||||||
|
|
||||||
|
\li In the \uicontrol Ignore field, specify the number of times that the
|
||||||
|
breakpoint is ignored before the program stops.
|
||||||
|
|
||||||
|
\li In the \uicontrol Commands field, specify the commands to execute
|
||||||
|
when the program stops; one command on a line. GDB executes the
|
||||||
|
commands in the order in which they are specified.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
For more information on breakpoints, see
|
||||||
|
\l{http://sourceware.org/gdb/onlinedocs/gdb/Breakpoints.html#Breakpoints}
|
||||||
|
{Breakpoints, Watchpoints, and Catchpoints} in GDB documentation.
|
||||||
|
|
||||||
|
\section2 Moving Breakpoints
|
||||||
|
|
||||||
|
To move the breakpoint, drag and drop a breakpoint marker to another line.
|
||||||
|
|
||||||
|
\section2 Deleting Breakpoints
|
||||||
|
|
||||||
|
To delete breakpoints:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li Click the breakpoint marker in the text editor.
|
||||||
|
|
||||||
|
\li Select the breakpoint in the \uicontrol Breakpoints view and press
|
||||||
|
\key Delete.
|
||||||
|
|
||||||
|
\li Select \uicontrol {Delete Breakpoint} in the context menu in the
|
||||||
|
\uicontrol Breakpoints view.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\section2 Enabling and Disabling Breakpoints
|
||||||
|
|
||||||
|
To temporarily disable a breakpoint without deleting it and losing associated
|
||||||
|
data like conditions and commands:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li Right-click the breakpoint marker in the text editor and select
|
||||||
|
\uicontrol{Disable Breakpoint}.
|
||||||
|
|
||||||
|
\li Select the breakpoint in the \uicontrol Breakpoints view and press
|
||||||
|
\key Space.
|
||||||
|
|
||||||
|
\li Select \uicontrol {Disabled Breakpoint} in the context menu in the
|
||||||
|
\uicontrol Breakpoints view.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
A disabled breakpoint is marked with a hollow read circle in the
|
||||||
|
text editor and the \uicontrol Breakpoint view.
|
||||||
|
|
||||||
|
To re-enable a temporarily disabled breakpoint:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li Right-click the marker of a disabled breakpoint in the text editor and
|
||||||
|
select \uicontrol{Enable Breakpoint}.
|
||||||
|
|
||||||
|
\li Select a disabled breakpoint in the \uicontrol Breakpoints view and press
|
||||||
|
\key Space.
|
||||||
|
|
||||||
|
\li Select \uicontrol {Disabled Breakpoint} in the context menu in the
|
||||||
|
\uicontrol Breakpoints view.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
With the notable exception of data breakpoints, breakpoints retain their
|
||||||
|
enabled or disabled state when the debugged program is restarted.
|
||||||
|
|
||||||
|
\section2 Setting Data Breakpoints
|
||||||
|
|
||||||
|
A \e {data breakpoint} stops the program when data is read or written at the
|
||||||
|
specified address.
|
||||||
|
|
||||||
|
To set a data breakpoint at an address:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\li Right-click in the \uicontrol Breakpoints view to open the context
|
||||||
|
menu, and select \uicontrol {Add Breakpoint}.
|
||||||
|
|
||||||
|
\li In the \uicontrol {Breakpoint type} field, select
|
||||||
|
\uicontrol {Break on data access at fixed address}.
|
||||||
|
|
||||||
|
\li In the \uicontrol Address field, specify the address of the memory
|
||||||
|
block.
|
||||||
|
|
||||||
|
\li Select \uicontrol OK.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
If the address is displayed in the \uicontrol {Locals} or
|
||||||
|
\uicontrol {Expressions} view, you can select
|
||||||
|
\uicontrol {Add Data Breakpoint at Object's Address} in the
|
||||||
|
context menu to set the data breakpoint.
|
||||||
|
|
||||||
|
Data breakpoints will be disabled when the debugged program exits, as it
|
||||||
|
is unlikely that the used addresses will stay the same at the next program
|
||||||
|
launch. If you really want a data breakpoint to be active again, re-enable
|
||||||
|
it manually.
|
||||||
|
|
||||||
|
//! [debugger-breakpoints]
|
||||||
|
|
||||||
|
//! [debugger-call-stack-trace]
|
||||||
|
|
||||||
|
\section1 Viewing Call Stack Trace
|
||||||
|
|
||||||
|
When the program being debugged is interrupted, \QC displays the nested
|
||||||
|
function calls leading to the current position as a call stack trace. This
|
||||||
|
stack trace is built up from call stack frames, each representing a
|
||||||
|
particular function. For each function, \QC tries to retrieve the file name
|
||||||
|
and line number of the corresponding source file. This data is shown in the
|
||||||
|
\uicontrol Stack view.
|
||||||
|
|
||||||
|
\image qtcreator-debug-stack.png
|
||||||
|
|
||||||
|
Since the call stack leading to the current position may originate or go
|
||||||
|
through code for which no debug information is available, not all stack
|
||||||
|
frames have corresponding source locations. Stack frames without
|
||||||
|
corresponding source locations are grayed out in the \uicontrol Stack view.
|
||||||
|
|
||||||
|
If you click a frame with a known source location, the text editor jumps to
|
||||||
|
the corresponding location and updates the \uicontrol {Locals} and
|
||||||
|
\uicontrol {Expressions} views, making it seem like the program
|
||||||
|
was interrupted before entering the function.
|
||||||
|
|
||||||
|
To find out which QML file is causing a Qt Quick 2 application to crash,
|
||||||
|
select \uicontrol {Load QML Stack} in the context menu in the
|
||||||
|
\uicontrol Stack view. The debugger tries to retrieve the JavaScript stack
|
||||||
|
from the stopped executable and prepends the frames to the C++ frames,
|
||||||
|
should it find any. You can click a frame in the QML stack to open the QML
|
||||||
|
file in the editor.
|
||||||
|
|
||||||
|
//! [debugger-call-stack-trace]
|
||||||
|
|
||||||
|
//! [debugger-locals]
|
||||||
|
|
||||||
|
\section1 Local Variables and Function Parameters
|
||||||
|
|
||||||
|
The Locals view consists of the \uicontrol Locals pane and the
|
||||||
|
\uicontrol {Return Value} pane (hidden when empty).
|
||||||
|
|
||||||
|
\image qtcreator-locals.png "Locals view"
|
||||||
|
|
||||||
|
Whenever a program stops under the control of the debugger, it retrieves
|
||||||
|
information about the topmost stack frame and displays it in the
|
||||||
|
\uicontrol {Locals} view. The \uicontrol Locals pane shows
|
||||||
|
information about parameters of the function in that frame as well as the
|
||||||
|
local variables. If the last operation in the debugger was returning from a
|
||||||
|
function after pressing \key {Shift+F11}, the \uicontrol {Return Value}
|
||||||
|
pane displays the value returned by the function.
|
||||||
|
|
||||||
|
//! [debugger-locals]
|
||||||
|
|
||||||
|
//! [debugger-expressions]
|
||||||
|
|
||||||
|
\section1 Evaluating Expressions
|
||||||
|
|
||||||
|
To compute values of arithmetic expressions or function calls, use
|
||||||
|
expression evaluators in the \uicontrol Expressions view. To insert a new
|
||||||
|
expression evaluator, either double-click on an empty part of the
|
||||||
|
\uicontrol {Expressions} or \uicontrol {Locals} view, or select
|
||||||
|
\uicontrol {Add New Expression Evaluator} from the context menu, or drag and
|
||||||
|
drop an expression from the code editor.
|
||||||
|
|
||||||
|
\image qtcreator-debugger-expressions.png
|
||||||
|
|
||||||
|
\note Expression evaluators are powerful, but slow down debugger operation
|
||||||
|
significantly. It is advisable to not use them excessively, and to remove
|
||||||
|
unneeded expression evaluators as soon as possible.
|
||||||
|
|
||||||
|
Expression evaluators are re-evaluated whenever the current frame changes.
|
||||||
|
Note that functions used in the expressions are called each time, even if
|
||||||
|
they have side-effects.
|
||||||
|
|
||||||
|
All backends support simple C and C++ expressions. Functions can be called
|
||||||
|
only if they are actually compiled into the debugged executable or a library
|
||||||
|
used by the executable. Most notably, inlined functions such as most
|
||||||
|
\c{operator[]} implementations of standard containers are typically \e{not}
|
||||||
|
available.
|
||||||
|
|
||||||
|
When using GDB or LLDB as backend, a special ranged syntax can be used to
|
||||||
|
display multiple values with one expression. A sub-expression of form
|
||||||
|
\c{foo[a..b]} is split into a sequence of individually evaluated expressions
|
||||||
|
\c{foo[a], ..., foo[b]}.
|
||||||
|
|
||||||
|
Compound variables of struct or class type are displayed as expandable in
|
||||||
|
the view. Expand entries to show all members. Together with the display of
|
||||||
|
value and type, you can examine and traverse the low-level layout of object
|
||||||
|
data.
|
||||||
|
|
||||||
|
\table
|
||||||
|
\row
|
||||||
|
\li \b{Note:}
|
||||||
|
|
||||||
|
\row
|
||||||
|
\li GDB and LLDB, and therefore \QC's debugger, also work for optimized
|
||||||
|
builds on Linux and \macos. Optimization can lead to re-ordering
|
||||||
|
of instructions or removal of some local variables, causing the
|
||||||
|
\uicontrol {Locals} and \uicontrol {Expressions} view to show
|
||||||
|
unexpected data.
|
||||||
|
\row
|
||||||
|
\li The debug information provided by GCC does not include enough
|
||||||
|
information about the time when a variable is initialized.
|
||||||
|
Therefore, \QC can not tell whether the contents of a local
|
||||||
|
variable contains "real data", or "initial noise". If a QObject
|
||||||
|
appears uninitialized, its value is reported as
|
||||||
|
\uicontrol {not in scope}. Not all uninitialized objects,
|
||||||
|
however, can be recognized as such.
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
The \uicontrol {Locals} and \uicontrol {Expressions} views also provide access
|
||||||
|
to the most powerful feature of the debugger: comprehensive display of data
|
||||||
|
belonging to Qt's basic objects. For example, in case of QObject, instead of
|
||||||
|
displaying a pointer to some private data structure, you see a list of
|
||||||
|
children, signals and slots.
|
||||||
|
|
||||||
|
Similarly, instead of displaying many pointers and integers, \QC's debugger
|
||||||
|
displays the contents of a QHash or QMap in an orderly manner. Also, the
|
||||||
|
debugger displays access data for QFileInfo and provides access to the
|
||||||
|
"real" contents of QVariant.
|
||||||
|
|
||||||
|
Right-click in the \uicontrol {Locals} or the \uicontrol {Expressions} view
|
||||||
|
to open a context menu that provides additional options for viewing data. The
|
||||||
|
available options depend on the type of the current items, and are provided
|
||||||
|
by the \l{Using Debugging Helpers}{Debugging Helpers}. Typically,
|
||||||
|
string-like data, such as \c{QByteArray} and \c{std::string}, offer a
|
||||||
|
selection of encodings, as well as the possibility to use a full editor
|
||||||
|
window. Map-like data, such as \c{QMap}, \c{QHash}, and \c{std::map}, offer
|
||||||
|
a compact option using the \c{name} column for keys, resulting in a concise
|
||||||
|
display of containers with short keys, such as numbers or short strings. For
|
||||||
|
example, to expand all the values of QMap, select
|
||||||
|
\uicontrol {Change Value Display Format} > \uicontrol Compact.
|
||||||
|
|
||||||
|
You can use the \uicontrol {Locals} and \uicontrol {Expressions} view to change
|
||||||
|
the contents of variables of simple data types, for example, \c int, \c float,
|
||||||
|
\c QString and \c std::string when the program is interrupted. To do so,
|
||||||
|
click the \uicontrol Value column, modify the value with the inplace editor,
|
||||||
|
and press \key Enter (or \key Return).
|
||||||
|
|
||||||
|
To change the complete contents of QVector or \c std::vector values, type
|
||||||
|
all values separated by commas into the \uicontrol Value column of the main
|
||||||
|
entry.
|
||||||
|
|
||||||
|
You can enable tooltips in the main editor displaying this information.
|
||||||
|
For more information, see \l{Showing Tooltips in Debug Mode}.
|
||||||
|
|
||||||
|
\note The set of evaluated expressions is saved in your session.
|
||||||
|
|
||||||
|
//! [debugger-expressions]
|
||||||
|
|
||||||
|
*/
|
@@ -353,9 +353,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-debugger-operating-modes.html
|
|
||||||
\page creator-debug-mode.html
|
\page creator-debug-mode.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-debugging.html
|
||||||
|
\nextpage creator-debugging-qml.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-debugger-operating-modes.html
|
||||||
\nextpage creator-debugging-helpers.html
|
\nextpage creator-debugging-helpers.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Interacting with the Debugger
|
\title Interacting with the Debugger
|
||||||
|
|
||||||
@@ -472,321 +477,10 @@
|
|||||||
It is also possible to continue executing the program until the current
|
It is also possible to continue executing the program until the current
|
||||||
function completes or jump to an arbitrary position in the current function.
|
function completes or jump to an arbitrary position in the current function.
|
||||||
|
|
||||||
\section1 Setting Breakpoints
|
\include creator-debugger-common.qdocinc debugger-breakpoints
|
||||||
|
\include creator-debugger-common.qdocinc debugger-call-stack-trace
|
||||||
A breakpoint represents a position or sets of positions in the code that,
|
\include creator-debugger-common.qdocinc debugger-locals
|
||||||
when executed, interrupts the program being debugged and passes the control
|
\include creator-debugger-common.qdocinc debugger-expressions
|
||||||
to you. You can then examine the state of the interrupted program, or
|
|
||||||
continue execution either line-by-line or continuously.
|
|
||||||
|
|
||||||
\QC shows breakpoints in the \uicontrol Breakpoints view which is enabled
|
|
||||||
by default. The \uicontrol Breakpoints view is also accessible when the
|
|
||||||
debugger and the program being debugged is not running.
|
|
||||||
|
|
||||||
\image qtcreator-debug-breakpoints.png "Breakpoints view"
|
|
||||||
|
|
||||||
You can associate breakpoints with:
|
|
||||||
|
|
||||||
\list
|
|
||||||
|
|
||||||
\li Source code files and lines
|
|
||||||
|
|
||||||
\li Functions
|
|
||||||
|
|
||||||
\li Addresses
|
|
||||||
|
|
||||||
\li Throwing and catching exceptions
|
|
||||||
|
|
||||||
\li Executing and forking processes
|
|
||||||
|
|
||||||
\li Executing some system calls
|
|
||||||
|
|
||||||
\li Changes in a block of memory at a particular address when a
|
|
||||||
program is running
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
The interruption of a program by a breakpoint can be restricted with certain
|
|
||||||
conditions.
|
|
||||||
|
|
||||||
You can set and delete breakpoints before the program starts running or
|
|
||||||
while it is running under the debugger's control. Breakpoints are saved
|
|
||||||
together with a session.
|
|
||||||
|
|
||||||
\section2 Adding Breakpoints
|
|
||||||
|
|
||||||
To add breakpoints:
|
|
||||||
|
|
||||||
\list 1
|
|
||||||
|
|
||||||
\li Add a new breakpoint in one of the following ways:
|
|
||||||
|
|
||||||
\list
|
|
||||||
|
|
||||||
\li In the code editor, click the left margin or press \key F9
|
|
||||||
(\key F8 for \macos) at a particular line you want the
|
|
||||||
program to stop.
|
|
||||||
|
|
||||||
\li In the \uicontrol Breakpoints view, double-click in the empty
|
|
||||||
part of the view.
|
|
||||||
|
|
||||||
\li In the \uicontrol Breakpoints view, select
|
|
||||||
\uicontrol {Add Breakpoint} in the context menu.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
\li In the \uicontrol {Breakpoint type} field, select the location in the
|
|
||||||
program code where you want the program to stop. The other options
|
|
||||||
to specify depend on the selected location.
|
|
||||||
|
|
||||||
\image qtcreator-add-breakpoint.png "Add Breakpoints" dialog
|
|
||||||
|
|
||||||
\li In the \uicontrol Condition field, set the condition to be evaluated
|
|
||||||
before stopping at the breakpoint if the condition evaluates as
|
|
||||||
true.
|
|
||||||
|
|
||||||
\li In the \uicontrol Ignore field, specify the number of times that the
|
|
||||||
breakpoint is ignored before the program stops.
|
|
||||||
|
|
||||||
\li In the \uicontrol Commands field, specify the commands to execute
|
|
||||||
when the program stops; one command on a line. GDB executes the
|
|
||||||
commands in the order in which they are specified.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
For more information on breakpoints, see
|
|
||||||
\l{http://sourceware.org/gdb/onlinedocs/gdb/Breakpoints.html#Breakpoints}
|
|
||||||
{Breakpoints, Watchpoints, and Catchpoints} in GDB documentation.
|
|
||||||
|
|
||||||
\section2 Moving Breakpoints
|
|
||||||
|
|
||||||
To move the breakpoint, drag and drop a breakpoint marker to another line.
|
|
||||||
|
|
||||||
\section2 Deleting Breakpoints
|
|
||||||
|
|
||||||
To delete breakpoints:
|
|
||||||
|
|
||||||
\list
|
|
||||||
|
|
||||||
\li Click the breakpoint marker in the text editor.
|
|
||||||
|
|
||||||
\li Select the breakpoint in the \uicontrol Breakpoints view and press
|
|
||||||
\key Delete.
|
|
||||||
|
|
||||||
\li Select \uicontrol {Delete Breakpoint} in the context menu in the
|
|
||||||
\uicontrol Breakpoints view.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
\section2 Enabling and Disabling Breakpoints
|
|
||||||
|
|
||||||
To temporarily disable a breakpoint without deleting it and losing associated
|
|
||||||
data like conditions and commands:
|
|
||||||
|
|
||||||
\list
|
|
||||||
|
|
||||||
\li Right-click the breakpoint marker in the text editor and select
|
|
||||||
\uicontrol{Disable Breakpoint}.
|
|
||||||
|
|
||||||
\li Select the breakpoint in the \uicontrol Breakpoints view and press
|
|
||||||
\key Space.
|
|
||||||
|
|
||||||
\li Select \uicontrol {Disabled Breakpoint} in the context menu in the
|
|
||||||
\uicontrol Breakpoints view.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
A disabled breakpoint is marked with a hollow read circle in the
|
|
||||||
text editor and the \uicontrol Breakpoint view.
|
|
||||||
|
|
||||||
To re-enable a temporarily disabled breakpoint:
|
|
||||||
|
|
||||||
\list
|
|
||||||
|
|
||||||
\li Right-click the marker of a disabled breakpoint in the text editor and
|
|
||||||
select \uicontrol{Enable Breakpoint}.
|
|
||||||
|
|
||||||
\li Select a disabled breakpoint in the \uicontrol Breakpoints view and press
|
|
||||||
\key Space.
|
|
||||||
|
|
||||||
\li Select \uicontrol {Disabled Breakpoint} in the context menu in the
|
|
||||||
\uicontrol Breakpoints view.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
With the notable exception of data breakpoints, breakpoints retain their
|
|
||||||
enabled or disabled state when the debugged program is restarted.
|
|
||||||
|
|
||||||
\section2 Setting Data Breakpoints
|
|
||||||
|
|
||||||
A \e {data breakpoint} stops the program when data is read or written at the
|
|
||||||
specified address.
|
|
||||||
|
|
||||||
To set a data breakpoint at an address:
|
|
||||||
|
|
||||||
\list 1
|
|
||||||
|
|
||||||
\li Right-click in the \uicontrol Breakpoints view to open the context
|
|
||||||
menu, and select \uicontrol {Add Breakpoint}.
|
|
||||||
|
|
||||||
\li In the \uicontrol {Breakpoint type} field, select
|
|
||||||
\uicontrol {Break on data access at fixed address}.
|
|
||||||
|
|
||||||
\li In the \uicontrol Address field, specify the address of the memory
|
|
||||||
block.
|
|
||||||
|
|
||||||
\li Select \uicontrol OK.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
If the address is displayed in the \uicontrol {Locals} or
|
|
||||||
\uicontrol {Expressions} view, you can select
|
|
||||||
\uicontrol {Add Data Breakpoint at Object's Address} in the
|
|
||||||
context menu to set the data breakpoint.
|
|
||||||
|
|
||||||
Data breakpoints will be disabled when the debugged program exits, as it
|
|
||||||
is unlikely that the used addresses will stay the same at the next program
|
|
||||||
launch. If you really want a data breakpoint to be active again, re-enable
|
|
||||||
it manually.
|
|
||||||
|
|
||||||
\section1 Viewing Call Stack Trace
|
|
||||||
|
|
||||||
When the program being debugged is interrupted, \QC displays the nested
|
|
||||||
function calls leading to the current position as a call stack trace. This
|
|
||||||
stack trace is built up from call stack frames, each representing a
|
|
||||||
particular function. For each function, \QC tries to retrieve the file name
|
|
||||||
and line number of the corresponding source file. This data is shown in the
|
|
||||||
\uicontrol Stack view.
|
|
||||||
|
|
||||||
\image qtcreator-debug-stack.png
|
|
||||||
|
|
||||||
Since the call stack leading to the current position may originate or go
|
|
||||||
through code for which no debug information is available, not all stack
|
|
||||||
frames have corresponding source locations. Stack frames without
|
|
||||||
corresponding source locations are grayed out in the \uicontrol Stack view.
|
|
||||||
|
|
||||||
If you click a frame with a known source location, the text editor jumps to
|
|
||||||
the corresponding location and updates the \uicontrol {Locals} and
|
|
||||||
\uicontrol {Expressions} views, making it seem like the program
|
|
||||||
was interrupted before entering the function.
|
|
||||||
|
|
||||||
To find out which QML file is causing a Qt Quick 2 application to crash,
|
|
||||||
select \uicontrol {Load QML Stack} in the context menu in the
|
|
||||||
\uicontrol Stack view. The debugger tries to retrieve the JavaScript stack
|
|
||||||
from the stopped executable and prepends the frames to the C++ frames,
|
|
||||||
should it find any. You can click a frame in the QML stack to open the QML
|
|
||||||
file in the editor.
|
|
||||||
|
|
||||||
\section1 Local Variables and Function Parameters
|
|
||||||
|
|
||||||
The Locals view consists of the \uicontrol Locals pane and the
|
|
||||||
\uicontrol {Return Value} pane (hidden when empty).
|
|
||||||
|
|
||||||
\image qtcreator-locals.png "Locals view"
|
|
||||||
|
|
||||||
Whenever a program stops under the control of the debugger, it retrieves
|
|
||||||
information about the topmost stack frame and displays it in the
|
|
||||||
\uicontrol {Locals} view. The \uicontrol Locals pane shows
|
|
||||||
information about parameters of the function in that frame as well as the
|
|
||||||
local variables. If the last operation in the debugger was returning from a
|
|
||||||
function after pressing \key {Shift+F11}, the \uicontrol {Return Value}
|
|
||||||
pane displays the value returned by the function.
|
|
||||||
|
|
||||||
|
|
||||||
\section1 Evaluating Expressions
|
|
||||||
|
|
||||||
To compute values of arithmetic expressions or function calls, use
|
|
||||||
expression evaluators in the \uicontrol Expressions view. To insert a new
|
|
||||||
expression evaluator, either double-click on an empty part of the
|
|
||||||
\uicontrol {Expressions} or \uicontrol {Locals} view, or select
|
|
||||||
\uicontrol {Add New Expression Evaluator} from the context menu, or drag and
|
|
||||||
drop an expression from the code editor.
|
|
||||||
|
|
||||||
\image qtcreator-debugger-expressions.png
|
|
||||||
|
|
||||||
\note Expression evaluators are powerful, but slow down debugger operation
|
|
||||||
significantly. It is advisable to not use them excessively, and to remove
|
|
||||||
unneeded expression evaluators as soon as possible.
|
|
||||||
|
|
||||||
Expression evaluators are re-evaluated whenever the current frame changes.
|
|
||||||
Note that functions used in the expressions are called each time, even if
|
|
||||||
they have side-effects.
|
|
||||||
|
|
||||||
All backends support simple C and C++ expressions. Functions can be called
|
|
||||||
only if they are actually compiled into the debugged executable or a library
|
|
||||||
used by the executable. Most notably, inlined functions such as most
|
|
||||||
\c{operator[]} implementations of standard containers are typically \e{not}
|
|
||||||
available.
|
|
||||||
|
|
||||||
When using GDB or LLDB as backend, a special ranged syntax can be used to
|
|
||||||
display multiple values with one expression. A sub-expression of form
|
|
||||||
\c{foo[a..b]} is split into a sequence of individually evaluated expressions
|
|
||||||
\c{foo[a], ..., foo[b]}.
|
|
||||||
|
|
||||||
Compound variables of struct or class type are displayed as expandable in
|
|
||||||
the view. Expand entries to show all members. Together with the display of
|
|
||||||
value and type, you can examine and traverse the low-level layout of object
|
|
||||||
data.
|
|
||||||
|
|
||||||
|
|
||||||
\table
|
|
||||||
\row
|
|
||||||
\li \b{Note:}
|
|
||||||
|
|
||||||
\row
|
|
||||||
\li GDB and LLDB, and therefore \QC's debugger, also work for optimized
|
|
||||||
builds on Linux and \macos. Optimization can lead to re-ordering
|
|
||||||
of instructions or removal of some local variables, causing the
|
|
||||||
\uicontrol {Locals} and \uicontrol {Expressions} view to show
|
|
||||||
unexpected data.
|
|
||||||
\row
|
|
||||||
\li The debug information provided by GCC does not include enough
|
|
||||||
information about the time when a variable is initialized.
|
|
||||||
Therefore, \QC can not tell whether the contents of a local
|
|
||||||
variable contains "real data", or "initial noise". If a QObject
|
|
||||||
appears uninitialized, its value is reported as
|
|
||||||
\uicontrol {not in scope}. Not all uninitialized objects,
|
|
||||||
however, can be recognized as such.
|
|
||||||
\endtable
|
|
||||||
|
|
||||||
|
|
||||||
The \uicontrol {Locals} and \uicontrol {Expressions} views also provide access
|
|
||||||
to the most powerful feature of the debugger: comprehensive display of data
|
|
||||||
belonging to Qt's basic objects. For example, in case of QObject, instead of
|
|
||||||
displaying a pointer to some private data structure, you see a list of
|
|
||||||
children, signals and slots.
|
|
||||||
|
|
||||||
Similarly, instead of displaying many pointers and integers, \QC's debugger
|
|
||||||
displays the contents of a QHash or QMap in an orderly manner. Also, the
|
|
||||||
debugger displays access data for QFileInfo and provides access to the
|
|
||||||
"real" contents of QVariant.
|
|
||||||
|
|
||||||
Right-click in the \uicontrol {Locals} or the \uicontrol {Expressions} view
|
|
||||||
to open a context menu that provides additional options for viewing data. The
|
|
||||||
available options depend on the type of the current items, and are provided
|
|
||||||
by the \l{Using Debugging Helpers}{Debugging Helpers}. Typically,
|
|
||||||
string-like data, such as \c{QByteArray} and \c{std::string}, offer a
|
|
||||||
selection of encodings, as well as the possibility to use a full editor
|
|
||||||
window. Map-like data, such as \c{QMap}, \c{QHash}, and \c{std::map}, offer
|
|
||||||
a compact option using the \c{name} column for keys, resulting in a concise
|
|
||||||
display of containers with short keys, such as numbers or short strings. For
|
|
||||||
example, to expand all the values of QMap, select
|
|
||||||
\uicontrol {Change Value Display Format} > \uicontrol Compact.
|
|
||||||
|
|
||||||
You can use the \uicontrol {Locals} and \uicontrol {Expressions} view to change
|
|
||||||
the contents of variables of simple data types, for example, \c int, \c float,
|
|
||||||
\c QString and \c std::string when the program is interrupted. To do so,
|
|
||||||
click the \uicontrol Value column, modify the value with the inplace editor,
|
|
||||||
and press \key Enter (or \key Return).
|
|
||||||
|
|
||||||
To change the complete contents of QVector or \c std::vector values, type
|
|
||||||
all values separated by commas into the \uicontrol Value column of the main
|
|
||||||
entry.
|
|
||||||
|
|
||||||
You can enable tooltips in the main editor displaying this information.
|
|
||||||
For more information, see \l{Showing Tooltips in Debug Mode}.
|
|
||||||
|
|
||||||
\note The set of evaluated expressions is saved in your session.
|
|
||||||
|
|
||||||
\section1 Directly Interacting with Native Debuggers
|
\section1 Directly Interacting with Native Debuggers
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-debugging-example.html
|
|
||||||
\page creator-qml-debugging-example.html
|
\page creator-qml-debugging-example.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-debugging-qml.html
|
||||||
|
\nextpage creator-qml-performance-monitor.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-debugging-example.html
|
||||||
\nextpage creator-troubleshooting-debugging.html
|
\nextpage creator-troubleshooting-debugging.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Debugging a Qt Quick Example Application
|
\title Debugging a Qt Quick Example Application
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-debugging-helpers.html
|
|
||||||
\page creator-debugging-qml.html
|
\page creator-debugging-qml.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-debugging.html
|
||||||
|
\nextpage creator-qml-debugging-example.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-debugging-helpers.html
|
||||||
\nextpage creator-debugging-example.html
|
\nextpage creator-debugging-example.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Debugging Qt Quick Projects
|
\title Debugging Qt Quick Projects
|
||||||
|
|
||||||
@@ -153,6 +158,13 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\include creator-debugger-common.qdocinc debugger-breakpoints
|
||||||
|
\include creator-debugger-common.qdocinc debugger-call-stack-trace
|
||||||
|
\include creator-debugger-common.qdocinc debugger-locals
|
||||||
|
\include creator-debugger-common.qdocinc debugger-expressions
|
||||||
|
\endif
|
||||||
|
|
||||||
\section1 Executing JavaScript Expressions
|
\section1 Executing JavaScript Expressions
|
||||||
|
|
||||||
When the application is interrupted by a breakpoint, you can use the
|
When the application is interrupted by a breakpoint, you can use the
|
||||||
|
@@ -31,8 +31,13 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-usability.html
|
|
||||||
\page creator-coding.html
|
\page creator-coding.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-keyboard-shortcuts.html
|
||||||
|
\nextpage
|
||||||
|
\else
|
||||||
|
\previouspage creator-usability.html
|
||||||
|
\endif
|
||||||
\nextpage creator-editor-functions.html
|
\nextpage creator-editor-functions.html
|
||||||
|
|
||||||
\title Coding
|
\title Coding
|
||||||
|
@@ -31,9 +31,13 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-editor-options.html
|
|
||||||
\page creator-editor-options-text.html
|
\page creator-editor-options-text.html
|
||||||
|
\previouspage creator-editor-options.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\nextpage studio-javascript.html
|
||||||
|
\else
|
||||||
\nextpage creator-editor-fakevim.html
|
\nextpage creator-editor-fakevim.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Specifying Text Editor Settings
|
\title Specifying Text Editor Settings
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-cli.html
|
|
||||||
\page creator-keyboard-shortcuts.html
|
\page creator-keyboard-shortcuts.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-advanced.html
|
||||||
|
\nextpage creator-coding.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-cli.html
|
||||||
\nextpage creator-editor-external.html
|
\nextpage creator-editor-external.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Keyboard Shortcuts
|
\title Keyboard Shortcuts
|
||||||
|
|
||||||
|
@@ -31,9 +31,13 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-deploying-android.html
|
|
||||||
\page creator-deployment-embedded-linux.html
|
\page creator-deployment-embedded-linux.html
|
||||||
|
\previouspage creator-deploying-android.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\nextpage creator-connecting-mobile.html
|
||||||
|
\else
|
||||||
\nextpage creator-deployment-qnx.html
|
\nextpage creator-deployment-qnx.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Deploying Applications to Embedded Linux Devices
|
\title Deploying Applications to Embedded Linux Devices
|
||||||
|
|
||||||
|
@@ -26,9 +26,14 @@
|
|||||||
/*!
|
/*!
|
||||||
|
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-developing-baremetal.html
|
|
||||||
\page creator-developing-generic-linux.html
|
\page creator-developing-generic-linux.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-developing-android.html
|
||||||
|
\nextpage creator-build-process-customizing.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-developing-baremetal.html
|
||||||
\nextpage creator-developing-ios.html
|
\nextpage creator-developing-ios.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Connecting Embedded Linux Devices
|
\title Connecting Embedded Linux Devices
|
||||||
|
|
||||||
|
@@ -55,10 +55,14 @@
|
|||||||
When you deploy the application to a generic Linux-based device, \QC
|
When you deploy the application to a generic Linux-based device, \QC
|
||||||
copies the application files to the connected device. You can test
|
copies the application files to the connected device. You can test
|
||||||
and debug the application on the device.
|
and debug the application on the device.
|
||||||
|
|
||||||
|
\if defined(qtcreator)
|
||||||
\li \l{Deploying Applications to QNX Neutrino Devices}
|
\li \l{Deploying Applications to QNX Neutrino Devices}
|
||||||
|
|
||||||
When you deploy the application to a QNX Neutrino device, \QC copies
|
When you deploy the application to a QNX Neutrino device, \QC copies
|
||||||
the application files to the connected device. You can test and
|
the application files to the connected device. You can test and
|
||||||
debug the application on the device.
|
debug the application on the device.
|
||||||
|
\endif
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
*/
|
*/
|
||||||
|
@@ -31,8 +31,12 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-task-lists.html
|
|
||||||
\page creator-help-overview.html
|
\page creator-help-overview.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-qml-performance-monitor.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-task-lists.html
|
||||||
|
\endif
|
||||||
\nextpage creator-help.html
|
\nextpage creator-help.html
|
||||||
|
|
||||||
\title Getting Help
|
\title Getting Help
|
||||||
|
@@ -31,8 +31,12 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-deployment-qnx.html
|
|
||||||
\page creator-connecting-mobile.html
|
\page creator-connecting-mobile.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-deployment-embedded-linux.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-deployment-qnx.html
|
||||||
|
\endif
|
||||||
\nextpage creator-developing-android.html
|
\nextpage creator-developing-android.html
|
||||||
|
|
||||||
\title Connecting Devices
|
\title Connecting Devices
|
||||||
@@ -59,10 +63,12 @@
|
|||||||
2.3.3, or later. You must install a Qt version targeting Android and
|
2.3.3, or later. You must install a Qt version targeting Android and
|
||||||
the Android SDK and NDK to develop for Android devices.
|
the Android SDK and NDK to develop for Android devices.
|
||||||
|
|
||||||
|
\if defined(qtcreator)
|
||||||
\li \l{Connecting Bare Metal Devices}
|
\li \l{Connecting Bare Metal Devices}
|
||||||
|
|
||||||
You can connect bare metal devices to the development PC and use \QC
|
You can connect bare metal devices to the development PC and use \QC
|
||||||
to debug applications on them with GDB or a hardware debugger.
|
to debug applications on them with GDB or a hardware debugger.
|
||||||
|
\endif
|
||||||
|
|
||||||
\li \l{Connecting Embedded Linux Devices}
|
\li \l{Connecting Embedded Linux Devices}
|
||||||
|
|
||||||
@@ -70,6 +76,7 @@
|
|||||||
Linux devices installed on the development
|
Linux devices installed on the development
|
||||||
PC, you can add it and the device to \QC.
|
PC, you can add it and the device to \QC.
|
||||||
|
|
||||||
|
\if defined(qtcreator)
|
||||||
\li \l{Connecting iOS Devices}
|
\li \l{Connecting iOS Devices}
|
||||||
|
|
||||||
You use the tools delivered with Xcode to connect devices to \QC.
|
You use the tools delivered with Xcode to connect devices to \QC.
|
||||||
@@ -82,9 +89,11 @@
|
|||||||
debug applications on them from within \QC. This is currently only
|
debug applications on them from within \QC. This is currently only
|
||||||
supported for QNX Neutrino devices, and requires the QNX SDK to be
|
supported for QNX Neutrino devices, and requires the QNX SDK to be
|
||||||
installed on the development PC.
|
installed on the development PC.
|
||||||
|
\endif
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\if defined(qtcreator)
|
||||||
\section1 Related Topics
|
\section1 Related Topics
|
||||||
|
|
||||||
\list
|
\list
|
||||||
@@ -97,4 +106,5 @@
|
|||||||
local Linux PC, remote generic SSH Linux targets, or
|
local Linux PC, remote generic SSH Linux targets, or
|
||||||
\l{Embedded Devices}{embedded devices}.
|
\l{Embedded Devices}{embedded devices}.
|
||||||
\endlist
|
\endlist
|
||||||
|
\endif
|
||||||
*/
|
*/
|
||||||
|
@@ -97,7 +97,7 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\li \macos 10.10 or later with the following:
|
\li \macos 10.11 or later with the following:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-developing-qnx.html
|
|
||||||
\page creator-build-process-customizing.html
|
\page creator-build-process-customizing.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-developing-generic-linux.html
|
||||||
|
\nextpage studio-advanced.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-developing-qnx.html
|
||||||
\nextpage creator-testing.html
|
\nextpage creator-testing.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Customizing the Build Process
|
\title Customizing the Build Process
|
||||||
|
|
||||||
|
@@ -31,8 +31,12 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-building-targets.html
|
|
||||||
\page creator-running-targets.html
|
\page creator-running-targets.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-live-preview.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-building-targets.html
|
||||||
|
\endif
|
||||||
\nextpage creator-deployment.html
|
\nextpage creator-deployment.html
|
||||||
|
|
||||||
\title Running on Multiple Platforms
|
\title Running on Multiple Platforms
|
||||||
@@ -76,5 +80,8 @@
|
|||||||
\l{Specifying Run Settings}.
|
\l{Specifying Run Settings}.
|
||||||
|
|
||||||
\include linux-mobile/creator-projects-running-generic-linux.qdocinc running on embedded linux
|
\include linux-mobile/creator-projects-running-generic-linux.qdocinc running on embedded linux
|
||||||
|
|
||||||
|
\if defined(qtcreator)
|
||||||
\include qnx/creator-projects-running-qnx.qdocinc running on qnx
|
\include qnx/creator-projects-running-qnx.qdocinc running on qnx
|
||||||
|
\endif
|
||||||
*/
|
*/
|
||||||
|
@@ -31,9 +31,13 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-code-style-settings.html
|
|
||||||
\page creator-build-dependencies.html
|
\page creator-build-dependencies.html
|
||||||
|
\previouspage creator-code-style-settings.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\nextpage studio-designing.html
|
||||||
|
\else
|
||||||
\nextpage creator-sharing-project-settings.html
|
\nextpage creator-sharing-project-settings.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Specifying Dependencies
|
\title Specifying Dependencies
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-using-qt-quick-designer.html
|
|
||||||
\page quick-components.html
|
\page quick-components.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-designing.html
|
||||||
|
\nextpage qtquick-navigator.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-using-qt-quick-designer.html
|
||||||
\nextpage quick-buttons.html
|
\nextpage quick-buttons.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Creating Components
|
\title Creating Components
|
||||||
|
|
||||||
|
@@ -25,9 +25,13 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage {Qt Creator Manual}
|
\contentspage {Qt Creator Manual}
|
||||||
\previouspage quick-dynamic-properties.html
|
|
||||||
\page quick-property-bindings.html
|
\page quick-property-bindings.html
|
||||||
|
\previouspage quick-dynamic-properties.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\nextpage quick-states.html
|
||||||
|
\else
|
||||||
\nextpage quick-connections-backend.html
|
\nextpage quick-connections-backend.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Adding Bindings Between Properties
|
\title Adding Bindings Between Properties
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-quick-ui-forms.html
|
|
||||||
\page creator-using-qt-quick-designer.html
|
\page creator-using-qt-quick-designer.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-tutorials.html
|
||||||
|
\nextpage studio-preview-example.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-quick-ui-forms.html
|
||||||
\nextpage quick-components.html
|
\nextpage quick-components.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Editing QML Files in Design Mode
|
\title Editing QML Files in Design Mode
|
||||||
|
|
||||||
|
@@ -25,9 +25,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage quick-states.html
|
|
||||||
\page qtquick-iso-icon-browser.html
|
\page qtquick-iso-icon-browser.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage qmldesigner-pathview-editor.html
|
||||||
|
\nextpage creator-quick-ui-forms.html
|
||||||
|
\else
|
||||||
|
\previouspage quick-states.html
|
||||||
\nextpage quick-export-to-qml.html
|
\nextpage quick-export-to-qml.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Browsing ISO 7000 Icons
|
\title Browsing ISO 7000 Icons
|
||||||
|
|
||||||
|
@@ -25,8 +25,12 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage {Qt Creator Manual}
|
\contentspage {Qt Creator Manual}
|
||||||
\previouspage quick-scalable-image.html
|
|
||||||
\page qtquick-navigator.html
|
\page qtquick-navigator.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage quick-components.html
|
||||||
|
\else
|
||||||
|
\previouspage quick-scalable-image.html
|
||||||
|
\endif
|
||||||
\nextpage qtquick-properties.html
|
\nextpage qtquick-properties.html
|
||||||
|
|
||||||
\title Managing Item Hierarchy
|
\title Managing Item Hierarchy
|
||||||
|
@@ -25,9 +25,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage qtquick-properties.html
|
|
||||||
\page qmldesigner-pathview-editor.html
|
\page qmldesigner-pathview-editor.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-fonts.html
|
||||||
|
\nextpage qtquick-iso-icon-browser.html
|
||||||
|
\else
|
||||||
|
\previouspage qtquick-properties.html
|
||||||
\nextpage qmldesigner-connections.html
|
\nextpage qmldesigner-connections.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Editing PathView Properties
|
\title Editing PathView Properties
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-analyze-mode.html
|
|
||||||
\page creator-qml-performance-monitor.html
|
\page creator-qml-performance-monitor.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage creator-qml-debugging-example.html
|
||||||
|
\nextpage creator-help-overview.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-analyze-mode.html
|
||||||
\nextpage creator-valgrind-overview.html
|
\nextpage creator-valgrind-overview.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Profiling QML Applications
|
\title Profiling QML Applications
|
||||||
|
|
@@ -25,9 +25,13 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage {Qt Creator Manual}
|
\contentspage {Qt Creator Manual}
|
||||||
\previouspage qtquick-navigator.html
|
|
||||||
\page qtquick-properties.html
|
\page qtquick-properties.html
|
||||||
|
\previouspage qtquick-navigator.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\nextpage studio-timeline.html
|
||||||
|
\else
|
||||||
\nextpage qmldesigner-pathview-editor.html
|
\nextpage qmldesigner-pathview-editor.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Specifying Item Properties
|
\title Specifying Item Properties
|
||||||
|
|
||||||
|
@@ -25,9 +25,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage {Qt Creator Manual}
|
\contentspage {Qt Creator Manual}
|
||||||
\previouspage quick-connections-backend.html
|
|
||||||
\page quick-states.html
|
\page quick-states.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage quick-property-bindings.html
|
||||||
|
\nextpage studio-fonts.html
|
||||||
|
\else
|
||||||
|
\previouspage quick-connections-backend.html
|
||||||
\nextpage qtquick-iso-icon-browser.html
|
\nextpage qtquick-iso-icon-browser.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Adding States
|
\title Adding States
|
||||||
|
|
||||||
|
@@ -32,9 +32,14 @@
|
|||||||
/*!
|
/*!
|
||||||
|
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage quick-projects.html
|
|
||||||
\page creator-quick-ui-forms.html
|
\page creator-quick-ui-forms.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage qtquick-iso-icon-browser.html
|
||||||
|
\nextpage studio-live-preview.html
|
||||||
|
\else
|
||||||
|
\previouspage quick-projects.html
|
||||||
\nextpage creator-using-qt-quick-designer.html
|
\nextpage creator-using-qt-quick-designer.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Qt Quick UI Forms
|
\title Qt Quick UI Forms
|
||||||
|
|
||||||
|
@@ -31,9 +31,14 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-vcs-cvs.html
|
|
||||||
\page creator-vcs-git.html
|
\page creator-vcs-git.html
|
||||||
|
\if defined(qtdesignstudio)
|
||||||
|
\previouspage studio-projects.html
|
||||||
|
\nextpage studio-designing.html
|
||||||
|
\else
|
||||||
|
\previouspage creator-vcs-cvs.html
|
||||||
\nextpage creator-vcs-mercurial.html
|
\nextpage creator-vcs-mercurial.html
|
||||||
|
\endif
|
||||||
|
|
||||||
\title Using Git
|
\title Using Git
|
||||||
|
|
||||||
|
@@ -2928,6 +2928,8 @@ class DumperBase:
|
|||||||
return str(simple)
|
return str(simple)
|
||||||
if self.ldisplay is not None:
|
if self.ldisplay is not None:
|
||||||
return self.ldisplay
|
return self.ldisplay
|
||||||
|
if self.type.code == TypeCodeEnum:
|
||||||
|
return self.displayEnum()
|
||||||
#if self.ldata is not None:
|
#if self.ldata is not None:
|
||||||
# if sys.version_info[0] == 2 and isinstance(self.ldata, buffer):
|
# if sys.version_info[0] == 2 and isinstance(self.ldata, buffer):
|
||||||
# return bytes(self.ldata).encode('hex')
|
# return bytes(self.ldata).encode('hex')
|
||||||
|
@@ -379,7 +379,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
if (!qEnvironmentVariableIsSet("QT_OPENGL"))
|
if (!qEnvironmentVariableIsSet("QT_OPENGL"))
|
||||||
qputenv("QT_OPENGL", "angle");
|
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (qEnvironmentVariableIsSet("QTCREATOR_DISABLE_NATIVE_MENUBAR")
|
if (qEnvironmentVariableIsSet("QTCREATOR_DISABLE_NATIVE_MENUBAR")
|
||||||
|
@@ -28,9 +28,10 @@ mingw {
|
|||||||
OTHER_FLAGS += --without-stack-protector
|
OTHER_FLAGS += --without-stack-protector
|
||||||
}
|
}
|
||||||
BOTAN_CXX_FLAGS =
|
BOTAN_CXX_FLAGS =
|
||||||
msvc: BOTAN_CXX_FLAGS += /wd4127 /wd4244 /wd4250 /wd4267 /wd4334 /wd4702 /wd4996
|
msvc: BOTAN_CXX_FLAGS += /wd4127 /wd4244 /wd4250 /wd4267 /wd4334 /wd4702 /wd4996 \
|
||||||
|
/D_ENABLE_EXTENDED_ALIGNED_STORAGE
|
||||||
else: BOTAN_CXX_FLAGS += -Wno-unused-parameter
|
else: BOTAN_CXX_FLAGS += -Wno-unused-parameter
|
||||||
macos: BOTAN_CXX_FLAGS += -mmacosx-version-min=$$QMAKE_MACOSX_DEPLOYMENT_TARGET -isysroot $$shell_quote($$QMAKE_MAC_SDK.macosx.Path)
|
macos: BOTAN_CXX_FLAGS += -mmacosx-version-min=$$QMAKE_MACOSX_DEPLOYMENT_TARGET -isysroot $$shell_quote($$QMAKE_MAC_SDK_PATH)
|
||||||
unix: BOTAN_CXX_FLAGS += -fPIC
|
unix: BOTAN_CXX_FLAGS += -fPIC
|
||||||
!isEmpty(BOTAN_CXX_FLAGS): OTHER_FLAGS += --cxxflags=$$shell_quote($$BOTAN_CXX_FLAGS)
|
!isEmpty(BOTAN_CXX_FLAGS): OTHER_FLAGS += --cxxflags=$$shell_quote($$BOTAN_CXX_FLAGS)
|
||||||
win32: OTHER_FLAGS += --link-method=hardlink
|
win32: OTHER_FLAGS += --link-method=hardlink
|
||||||
@@ -44,7 +45,7 @@ configure.output = $$BOTAN_BUILD_DIR/Makefile
|
|||||||
configure.variable_out = BOTAN_MAKEFILE
|
configure.variable_out = BOTAN_MAKEFILE
|
||||||
configure.commands = cd $$BOTAN_BUILD_DIR_FOR_SHELL && \
|
configure.commands = cd $$BOTAN_BUILD_DIR_FOR_SHELL && \
|
||||||
python $$CONFIGURE_FILE_PATH_FOR_SHELL \
|
python $$CONFIGURE_FILE_PATH_FOR_SHELL \
|
||||||
--cc=$$BOTAN_CC_TYPE --cc-bin=$$QMAKE_CXX \
|
--cc=$$BOTAN_CC_TYPE --cc-bin=$$shell_quote($$QMAKE_CXX) \
|
||||||
$$BOTAN_ARCH_SWITCH $$BOTAN_OS_SWITCH $$OTHER_FLAGS
|
$$BOTAN_ARCH_SWITCH $$BOTAN_OS_SWITCH $$OTHER_FLAGS
|
||||||
QMAKE_EXTRA_COMPILERS += configure
|
QMAKE_EXTRA_COMPILERS += configure
|
||||||
|
|
||||||
|
@@ -44,7 +44,7 @@ Product {
|
|||||||
var cxxFlags = [];
|
var cxxFlags = [];
|
||||||
if (product.qbs.toolchain.contains("msvc")) {
|
if (product.qbs.toolchain.contains("msvc")) {
|
||||||
cxxFlags.push("/wd4127", "/wd4244", "/wd4250", "/wd4267", "/wd4334", "/wd4702",
|
cxxFlags.push("/wd4127", "/wd4244", "/wd4250", "/wd4267", "/wd4334", "/wd4702",
|
||||||
"/wd4996");
|
"/wd4996", "/D_ENABLE_EXTENDED_ALIGNED_STORAGE");
|
||||||
}
|
}
|
||||||
else if (product.qbs.toolchain.contains("gcc"))
|
else if (product.qbs.toolchain.contains("gcc"))
|
||||||
cxxFlags.push("-Wno-unused-parameter");
|
cxxFlags.push("-Wno-unused-parameter");
|
||||||
|
@@ -50,6 +50,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QtEndian>
|
#include <QtEndian>
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
using namespace Utils::Internal;
|
using namespace Utils::Internal;
|
||||||
|
@@ -547,7 +547,7 @@ void TestResultsPane::onCustomContextMenuRequested(const QPoint &pos)
|
|||||||
connect(action, &QAction::triggered, this, &TestResultsPane::onSaveWholeTriggered);
|
connect(action, &QAction::triggered, this, &TestResultsPane::onSaveWholeTriggered);
|
||||||
menu.addAction(action);
|
menu.addAction(action);
|
||||||
|
|
||||||
const auto correlatingItem = clicked ? clicked->findTestTreeItem() : nullptr;
|
const auto correlatingItem = (enabled && clicked) ? clicked->findTestTreeItem() : nullptr;
|
||||||
action = new QAction(tr("Run This Test"), &menu);
|
action = new QAction(tr("Run This Test"), &menu);
|
||||||
action->setEnabled(correlatingItem && correlatingItem->canProvideTestConfiguration());
|
action->setEnabled(correlatingItem && correlatingItem->canProvideTestConfiguration());
|
||||||
connect(action, &QAction::triggered, this, [this, clicked] {
|
connect(action, &QAction::triggered, this, [this, clicked] {
|
||||||
|
@@ -514,6 +514,13 @@ bool CompletionList::eventFilter(QObject *watched, QEvent *event)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Qt::Key_P:
|
||||||
|
case Qt::Key_N:
|
||||||
|
if (ke->modifiers() == Qt::KeyboardModifiers(Utils::HostOsInfo::controlModifier())) {
|
||||||
|
event->accept();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Utils::TreeView::eventFilter(watched, event);
|
return Utils::TreeView::eventFilter(watched, event);
|
||||||
|
@@ -378,10 +378,7 @@ FolderNavigationWidget::FolderNavigationWidget(QWidget *parent) : QWidget(parent
|
|||||||
connect(m_listView->selectionModel(),
|
connect(m_listView->selectionModel(),
|
||||||
&QItemSelectionModel::currentChanged,
|
&QItemSelectionModel::currentChanged,
|
||||||
this,
|
this,
|
||||||
[this](const QModelIndex ¤t, const QModelIndex &previous) {
|
&FolderNavigationWidget::setCrumblePath,
|
||||||
setCrumblePath(m_sortProxyModel->mapToSource(current),
|
|
||||||
m_sortProxyModel->mapToSource(previous));
|
|
||||||
},
|
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
connect(m_crumbLabel, &Utils::FileCrumbLabel::pathClicked, [this](const Utils::FileName &path) {
|
connect(m_crumbLabel, &Utils::FileCrumbLabel::pathClicked, [this](const Utils::FileName &path) {
|
||||||
const QModelIndex rootIndex = m_sortProxyModel->mapToSource(m_listView->rootIndex());
|
const QModelIndex rootIndex = m_sortProxyModel->mapToSource(m_listView->rootIndex());
|
||||||
@@ -618,13 +615,15 @@ void FolderNavigationWidget::selectFile(const Utils::FileName &filePath)
|
|||||||
// Use magic timer for scrolling.
|
// Use magic timer for scrolling.
|
||||||
m_listView->setCurrentIndex(fileIndex);
|
m_listView->setCurrentIndex(fileIndex);
|
||||||
QTimer::singleShot(200, this, [this, filePath] {
|
QTimer::singleShot(200, this, [this, filePath] {
|
||||||
const QModelIndex fileIndex = m_fileSystemModel->index(filePath.toString());
|
const QModelIndex fileIndex = m_sortProxyModel->mapFromSource(
|
||||||
|
m_fileSystemModel->index(filePath.toString()));
|
||||||
if (fileIndex == m_listView->rootIndex()) {
|
if (fileIndex == m_listView->rootIndex()) {
|
||||||
m_listView->horizontalScrollBar()->setValue(0);
|
m_listView->horizontalScrollBar()->setValue(0);
|
||||||
m_listView->verticalScrollBar()->setValue(0);
|
m_listView->verticalScrollBar()->setValue(0);
|
||||||
} else {
|
} else {
|
||||||
m_listView->scrollTo(fileIndex);
|
m_listView->scrollTo(fileIndex);
|
||||||
}
|
}
|
||||||
|
setCrumblePath(fileIndex);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -700,11 +699,12 @@ void FolderNavigationWidget::createNewFolder(const QModelIndex &parent)
|
|||||||
m_listView->edit(index);
|
m_listView->edit(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderNavigationWidget::setCrumblePath(const QModelIndex &index, const QModelIndex &)
|
void FolderNavigationWidget::setCrumblePath(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
|
const QModelIndex sourceIndex = m_sortProxyModel->mapToSource(index);
|
||||||
const int width = m_crumbLabel->width();
|
const int width = m_crumbLabel->width();
|
||||||
const int previousHeight = m_crumbLabel->immediateHeightForWidth(width);
|
const int previousHeight = m_crumbLabel->immediateHeightForWidth(width);
|
||||||
m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(index)));
|
m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(sourceIndex)));
|
||||||
const int currentHeight = m_crumbLabel->immediateHeightForWidth(width);
|
const int currentHeight = m_crumbLabel->immediateHeightForWidth(width);
|
||||||
const int diff = currentHeight - previousHeight;
|
const int diff = currentHeight - previousHeight;
|
||||||
if (diff != 0 && m_crumbLabel->isVisible()) {
|
if (diff != 0 && m_crumbLabel->isVisible()) {
|
||||||
|
@@ -131,7 +131,7 @@ private:
|
|||||||
QStringList projectsInDirectory(const QModelIndex &index) const;
|
QStringList projectsInDirectory(const QModelIndex &index) const;
|
||||||
void openProjectsInDirectory(const QModelIndex &index);
|
void openProjectsInDirectory(const QModelIndex &index);
|
||||||
void createNewFolder(const QModelIndex &parent);
|
void createNewFolder(const QModelIndex &parent);
|
||||||
void setCrumblePath(const QModelIndex &index, const QModelIndex &);
|
void setCrumblePath(const QModelIndex &index);
|
||||||
|
|
||||||
Core::IContext *m_context = nullptr;
|
Core::IContext *m_context = nullptr;
|
||||||
Utils::NavigationTreeView *m_listView = nullptr;
|
Utils::NavigationTreeView *m_listView = nullptr;
|
||||||
|
@@ -1339,6 +1339,7 @@ void tst_Dumpers::dumper()
|
|||||||
"\n\n" + data.includes +
|
"\n\n" + data.includes +
|
||||||
"\n\n" + (data.useQHash ?
|
"\n\n" + (data.useQHash ?
|
||||||
"\n#include <QByteArray>"
|
"\n#include <QByteArray>"
|
||||||
|
"\n#include <QtGlobal>"
|
||||||
"\n#if QT_VERSION >= 0x050900"
|
"\n#if QT_VERSION >= 0x050900"
|
||||||
"\n#include <QHash>"
|
"\n#include <QHash>"
|
||||||
"\nvoid initHashSeed() { qSetGlobalQHashSeed(0); }"
|
"\nvoid initHashSeed() { qSetGlobalQHashSeed(0); }"
|
||||||
@@ -6836,12 +6837,14 @@ void tst_Dumpers::dumper_data()
|
|||||||
|
|
||||||
|
|
||||||
QTest::newRow("Internal2")
|
QTest::newRow("Internal2")
|
||||||
<< Data("struct Foo { int bar = 15; }; \n"
|
<< Data("enum E { V1, V2 };\n"
|
||||||
|
"struct Foo { int bar = 15; E e = V1; };\n"
|
||||||
"struct QtcDumperTest_PointerArray {\n"
|
"struct QtcDumperTest_PointerArray {\n"
|
||||||
" Foo *foos = new Foo[10];\n"
|
" Foo *foos = new Foo[10];\n"
|
||||||
"};\n\n",
|
"};\n\n",
|
||||||
"QtcDumperTest_PointerArray tc; unused(&tc);\n")
|
"QtcDumperTest_PointerArray tc; unused(&tc);\n")
|
||||||
+ Check("tc.0.bar", "15", "int")
|
+ Check("tc.0.bar", "15", "int")
|
||||||
|
+ Check("tc.0.e", "V1 (0)", "E")
|
||||||
+ Check("tc.1.bar", "15", "int")
|
+ Check("tc.1.bar", "15", "int")
|
||||||
+ Check("tc.2.bar", "15", "int")
|
+ Check("tc.2.bar", "15", "int")
|
||||||
+ Check("tc.3.bar", "15", "int");
|
+ Check("tc.3.bar", "15", "int");
|
||||||
|
@@ -37,6 +37,8 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
#include <private/qdatetime_p.h>
|
#include <private/qdatetime_p.h>
|
||||||
#include <private/qfile_p.h>
|
#include <private/qfile_p.h>
|
||||||
#include <private/qfileinfo_p.h>
|
#include <private/qfileinfo_p.h>
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#include <QtCore/QDir>
|
#include <QtCore/QDir>
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
|
#include <QtCore/QtGlobal>
|
||||||
#include <QtDeclarative/QDeclarativeComponent>
|
#include <QtDeclarative/QDeclarativeComponent>
|
||||||
#include <QtDeclarative/QDeclarativeEngine>
|
#include <QtDeclarative/QDeclarativeEngine>
|
||||||
#include <QtDeclarative/QDeclarativeContext>
|
#include <QtDeclarative/QDeclarativeContext>
|
||||||
|
@@ -44,7 +44,7 @@ class Targets:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def availableTargetClasses():
|
def availableTargetClasses():
|
||||||
availableTargets = list(Targets.ALL_TARGETS)
|
availableTargets = set(Targets.ALL_TARGETS)
|
||||||
if platform.system() in ('Windows', 'Microsoft'):
|
if platform.system() in ('Windows', 'Microsoft'):
|
||||||
availableTargets.remove(Targets.EMBEDDED_LINUX)
|
availableTargets.remove(Targets.EMBEDDED_LINUX)
|
||||||
elif platform.system() == 'Darwin':
|
elif platform.system() == 'Darwin':
|
||||||
@@ -54,8 +54,7 @@ class Targets:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def desktopTargetClasses():
|
def desktopTargetClasses():
|
||||||
desktopTargets = Targets.availableTargetClasses()
|
desktopTargets = Targets.availableTargetClasses()
|
||||||
if Targets.EMBEDDED_LINUX in desktopTargets:
|
desktopTargets.discard(Targets.EMBEDDED_LINUX)
|
||||||
desktopTargets.remove(Targets.EMBEDDED_LINUX)
|
|
||||||
return desktopTargets
|
return desktopTargets
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -64,10 +63,7 @@ class Targets:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getTargetsAsStrings(targets):
|
def getTargetsAsStrings(targets):
|
||||||
if not isinstance(targets, (tuple,list)):
|
return set(map(Targets.getStringForTarget, targets))
|
||||||
test.fatal("Wrong usage... This function handles only tuples or lists.")
|
|
||||||
return None
|
|
||||||
return map(Targets.getStringForTarget, targets)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getIdForTargetName(targetName):
|
def getIdForTargetName(targetName):
|
||||||
|
@@ -155,8 +155,8 @@ def __createProjectHandleQtQuickSelection__(minimumQtVersion):
|
|||||||
# withoutQt4 if True Qt4 will get unchecked / not selected while checking the targets
|
# withoutQt4 if True Qt4 will get unchecked / not selected while checking the targets
|
||||||
def __selectQtVersionDesktop__(checks, available=None, withoutQt4=False):
|
def __selectQtVersionDesktop__(checks, available=None, withoutQt4=False):
|
||||||
wanted = Targets.desktopTargetClasses()
|
wanted = Targets.desktopTargetClasses()
|
||||||
if withoutQt4 and Targets.DESKTOP_4_8_7_DEFAULT in wanted:
|
if withoutQt4:
|
||||||
wanted.remove(Targets.DESKTOP_4_8_7_DEFAULT)
|
wanted.discard(Targets.DESKTOP_4_8_7_DEFAULT)
|
||||||
checkedTargets = __chooseTargets__(wanted, available)
|
checkedTargets = __chooseTargets__(wanted, available)
|
||||||
if checks:
|
if checks:
|
||||||
for target in checkedTargets:
|
for target in checkedTargets:
|
||||||
@@ -197,8 +197,7 @@ def __modifyAvailableTargets__(available, requiredQt, asStrings=False):
|
|||||||
toBeRemoved = Targets.EMBEDDED_LINUX
|
toBeRemoved = Targets.EMBEDDED_LINUX
|
||||||
if asStrings:
|
if asStrings:
|
||||||
toBeRemoved = Targets.getStringForTarget(toBeRemoved)
|
toBeRemoved = Targets.getStringForTarget(toBeRemoved)
|
||||||
if toBeRemoved in available:
|
available.discard(toBeRemoved)
|
||||||
available.remove(toBeRemoved)
|
|
||||||
for currentItem in tmp:
|
for currentItem in tmp:
|
||||||
if asStrings:
|
if asStrings:
|
||||||
item = currentItem
|
item = currentItem
|
||||||
@@ -207,7 +206,7 @@ def __modifyAvailableTargets__(available, requiredQt, asStrings=False):
|
|||||||
found = versionFinder.search(item)
|
found = versionFinder.search(item)
|
||||||
if found:
|
if found:
|
||||||
if Qt5Path.toVersionTuple(found.group(1)) < Qt5Path.toVersionTuple(requiredQt):
|
if Qt5Path.toVersionTuple(found.group(1)) < Qt5Path.toVersionTuple(requiredQt):
|
||||||
available.remove(currentItem)
|
available.discard(currentItem)
|
||||||
|
|
||||||
# Creates a Qt GUI project
|
# Creates a Qt GUI project
|
||||||
# param path specifies where to create the project
|
# param path specifies where to create the project
|
||||||
@@ -398,14 +397,14 @@ def __chooseTargets__(targets, availableTargets=None, additionalFunc=None):
|
|||||||
else:
|
else:
|
||||||
# following targets depend on the build environment - added for further/later tests
|
# following targets depend on the build environment - added for further/later tests
|
||||||
available = Targets.availableTargetClasses()
|
available = Targets.availableTargetClasses()
|
||||||
checkedTargets = []
|
checkedTargets = set()
|
||||||
for current in available:
|
for current in available:
|
||||||
mustCheck = current in targets
|
mustCheck = current in targets
|
||||||
try:
|
try:
|
||||||
ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current),
|
ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current),
|
||||||
mustCheck, 3000)
|
mustCheck, 3000)
|
||||||
if mustCheck:
|
if mustCheck:
|
||||||
checkedTargets.append(current)
|
checkedTargets.add(current)
|
||||||
|
|
||||||
# perform additional function on detailed kits view
|
# perform additional function on detailed kits view
|
||||||
if additionalFunc:
|
if additionalFunc:
|
||||||
@@ -517,26 +516,26 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False):
|
|||||||
version = None
|
version = None
|
||||||
if templateName.startswith("Qt Quick Application - "):
|
if templateName.startswith("Qt Quick Application - "):
|
||||||
if templateName == "Qt Quick Application - Empty":
|
if templateName == "Qt Quick Application - Empty":
|
||||||
result = [Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT]
|
result = set([Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT])
|
||||||
else:
|
else:
|
||||||
result = [Targets.DESKTOP_5_10_1_DEFAULT]
|
result = set([Targets.DESKTOP_5_10_1_DEFAULT])
|
||||||
elif 'Supported Platforms' in text:
|
elif 'Supported Platforms' in text:
|
||||||
supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split(" ")
|
supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split(" ")
|
||||||
result = []
|
result = set()
|
||||||
if 'Desktop' in supports:
|
if 'Desktop' in supports:
|
||||||
if (version == None or version < "5.0"):
|
if (version == None or version < "5.0"):
|
||||||
result.append(Targets.DESKTOP_4_8_7_DEFAULT)
|
result.add(Targets.DESKTOP_4_8_7_DEFAULT)
|
||||||
if platform.system() in ("Linux", "Darwin"):
|
if platform.system() in ("Linux", "Darwin"):
|
||||||
result.append(Targets.EMBEDDED_LINUX)
|
result.add(Targets.EMBEDDED_LINUX)
|
||||||
result.extend([Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT])
|
result = result.union(set([Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT]))
|
||||||
if platform.system() != 'Darwin':
|
if platform.system() != 'Darwin':
|
||||||
result.append(Targets.DESKTOP_5_4_1_GCC)
|
result.add(Targets.DESKTOP_5_4_1_GCC)
|
||||||
elif 'Platform independent' in text:
|
elif 'Platform independent' in text:
|
||||||
result = Targets.desktopTargetClasses()
|
result = Targets.desktopTargetClasses()
|
||||||
else:
|
else:
|
||||||
test.warning("Returning None (__getSupportedPlatforms__())",
|
test.warning("Returning None (__getSupportedPlatforms__())",
|
||||||
"Parsed text: '%s'" % text)
|
"Parsed text: '%s'" % text)
|
||||||
return [], None
|
return set(), None
|
||||||
if getAsStrings:
|
if getAsStrings:
|
||||||
result = Targets.getTargetsAsStrings(result)
|
result = Targets.getTargetsAsStrings(result)
|
||||||
return result, version
|
return result, version
|
||||||
|
@@ -41,7 +41,7 @@ def main():
|
|||||||
return
|
return
|
||||||
# open example project, supports only Qt 5
|
# open example project, supports only Qt 5
|
||||||
targets = Targets.desktopTargetClasses()
|
targets = Targets.desktopTargetClasses()
|
||||||
targets.remove(Targets.DESKTOP_4_8_7_DEFAULT)
|
targets.discard(Targets.DESKTOP_4_8_7_DEFAULT)
|
||||||
openQmakeProject(examplePath, targets)
|
openQmakeProject(examplePath, targets)
|
||||||
# build and wait until finished - on all build configurations
|
# build and wait until finished - on all build configurations
|
||||||
availableConfigs = iterateBuildConfigs()
|
availableConfigs = iterateBuildConfigs()
|
||||||
|
@@ -87,23 +87,20 @@ def main():
|
|||||||
|
|
||||||
def verifyKitCheckboxes(kits, displayedPlatforms):
|
def verifyKitCheckboxes(kits, displayedPlatforms):
|
||||||
waitForObject("{type='QLabel' unnamed='1' visible='1' text='Kit Selection'}")
|
waitForObject("{type='QLabel' unnamed='1' visible='1' text='Kit Selection'}")
|
||||||
availableCheckboxes = filter(visibleCheckBoxExists, kits.keys())
|
availableCheckboxes = frozenset(filter(visibleCheckBoxExists, kits.keys()))
|
||||||
# verification whether expected, found and configured match
|
# verification whether expected, found and configured match
|
||||||
for t in kits:
|
|
||||||
if t in displayedPlatforms:
|
expectedShownKits = availableCheckboxes.intersection(displayedPlatforms)
|
||||||
if t in availableCheckboxes:
|
unexpectedShownKits = availableCheckboxes.difference(displayedPlatforms)
|
||||||
test.passes("Found expected kit '%s' on 'Kit Selection' page." % t)
|
missingKits = displayedPlatforms.difference(availableCheckboxes)
|
||||||
availableCheckboxes.remove(t)
|
|
||||||
else:
|
test.log("Expected kits shown on 'Kit Selection' page:\n%s" % "\n".join(expectedShownKits))
|
||||||
test.fail("Expected kit '%s' missing on 'Kit Selection' page." % t)
|
if len(unexpectedShownKits):
|
||||||
else:
|
test.fail("Kits found on 'Kit Selection' page but not expected:\n%s"
|
||||||
if t in availableCheckboxes:
|
% "\n".join(unexpectedShownKits))
|
||||||
test.fail("Kit '%s' found on 'Kit Selection' page - but was not expected!" % t)
|
if len(missingKits):
|
||||||
else:
|
test.fail("Expected kits missing on 'Kit Selection' page:\n%s"
|
||||||
test.passes("Irrelevant kit '%s' not found on 'Kit Selection' page." % t)
|
% "\n".join(missingKits))
|
||||||
if len(availableCheckboxes) != 0:
|
|
||||||
test.fail("Found unexpected additional kit(s) %s on 'Kit Selection' page."
|
|
||||||
% str(availableCheckboxes))
|
|
||||||
|
|
||||||
def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
|
def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
|
||||||
specialHandlingFunc = None, *args):
|
specialHandlingFunc = None, *args):
|
||||||
|
Reference in New Issue
Block a user