Doc: Update debugger topics

- Add info about PDB
- Edit info about setting up debuggers and add (existing)
  screenshots
- Update info about Add Breakpoints view
- Move some text around

Task-number: QTCREATORBUG-28778
Change-Id: Ice3813ef2d4b143ed1f9d246aa6c029829dee60f
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Leena Miettinen
2023-03-21 18:13:50 +01:00
parent d99128e5e6
commit 7babb9677d
14 changed files with 251 additions and 171 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -12,7 +12,7 @@
\title Viewing Call Stack Trace \title Viewing Call Stack Trace
When the program being debugged is interrupted, \QC displays the nested When the application being debugged is interrupted, \QC displays the nested
function calls leading to the current position as a call stack trace. This 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 stack trace is built up from call stack frames, each representing a
particular function. For each function, \QC tries to retrieve the file name particular function. For each function, \QC tries to retrieve the file name
@@ -24,14 +24,17 @@
Since the call stack leading to the current position may originate or go 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 through code for which no debug information is available, not all stack
frames have corresponding source locations. Stack frames without frames have corresponding source locations. Stack frames without
corresponding source locations are grayed out in the \uicontrol Stack view. corresponding source locations are grayed out.
If you click a frame with a known source location, the text editor jumps to If you click a frame with a known source location, the text editor jumps to
the corresponding location and updates the \uicontrol {Locals} and the corresponding location and updates the
\uicontrol {Expressions} views, making it seem like the program \l {Local Variables and Function Parameters}{Locals} and
was interrupted before entering the function. \l {Evaluating Expressions}{Expressions} views, making it seem like the
application was interrupted before entering the function.
To find out which QML file is causing a Qt Quick 2 application to crash, \section1 Loading QML Stack
To find out which QML file is causing a Qt Quick application to crash,
select \uicontrol {Load QML Stack} in the context menu in the select \uicontrol {Load QML Stack} in the context menu in the
\uicontrol Stack view. The debugger tries to retrieve the JavaScript stack \uicontrol Stack view. The debugger tries to retrieve the JavaScript stack
from the stopped executable and prepends the frames to the C++ frames, from the stopped executable and prepends the frames to the C++ frames,
@@ -66,8 +69,8 @@
\li Executing some system calls \li Executing some system calls
\li Changes in a block of memory at a particular address when a \li Changes in a block of memory at a particular address when an
program is running application is running
\li Emitting QML signals \li Emitting QML signals
@@ -75,26 +78,30 @@
\endlist \endlist
The interruption of a program by a breakpoint can be restricted with certain A breakpoint interrupts the application every time the application reaches
conditions. its location unless you specify a boolean condition for it. The breakpoint
evaluates the expression each time the application passes it, and the
application stops only if the condition evaluates to \c true.
\section1 Unclaimed and Claimed Breakpoints
Breakpoints come in two varieties: \c unclaimed and \c claimed. Breakpoints come in two varieties: \c unclaimed and \c claimed.
An unclaimed breakpoint represents a task to interrupt the debugged An unclaimed breakpoint represents a task to interrupt the debugged
program and passes the control to you later. It has two states: application and passes the control to you later. It has two states:
\c pending and \c implanted. \c pending and \c implanted.
Unclaimed breakpoints are stored as a part of a session and exist Unclaimed breakpoints are stored as a part of a session and exist
independently of whether a program is being debugged or not. They independently of whether an application is being debugged or not. They
are listed in the \uicontrol {Breakpoint Preset} view and in the are listed in the \uicontrol {Breakpoint Preset} view and in the
editor using the \inlineimage icons/qtcreator-unclaimed-breakpoint-icon.png editor using the \inlineimage icons/qtcreator-unclaimed-breakpoint-icon.png
(\uicontrol {Unclaimed Breakpoint}) icon, when they refer to a position (\uicontrol {Unclaimed Breakpoint}) icon, when they refer to a position
in code. in code.
\image qtcreator-debugger-breakpoint-preset.png {Breakpoint Preset view} \image qtcreator-debugger-breakpoint-preset.webp {Breakpoint Preset view}
When a debugger starts, the debugging backend identifies breakpoints When a debugger starts, the debugging backend identifies breakpoints
from the set of unclaimed breakpoints that might be handled by the from the set of unclaimed breakpoints that might be handled by the
debugged program and claims them for its own exclusive use. Claimed debugged application and claims them for its own exclusive use. Claimed
breakpoints are listed in the \uicontrol {Breakpoints} view of the breakpoints are listed in the \uicontrol {Breakpoints} view of the
running debugger. This view only exists while the debugger is running. running debugger. This view only exists while the debugger is running.
@@ -115,11 +122,11 @@
\uicontrol{Breakpoint Preset} view. \uicontrol{Breakpoint Preset} view.
When an implanted breakpoint is hit during the execution of the When an implanted breakpoint is hit during the execution of the
debugged program, control is passed back to you. debugged application, control is passed back to you.
You can then examine the state of the interrupted program, or You can then examine the state of the interrupted application, or
continue execution either line-by-line or continuously. continue execution either line-by-line or continuously.
\image qtcreator-debug-breakpoints.png "Breakpoints view" \image qtcreator-debug-breakpoints.webp {Breakpoints view}
\section1 Adding Breakpoints \section1 Adding Breakpoints
@@ -133,7 +140,7 @@
\li In the code editor, click the left margin or press \key F9 \li In the code editor, click the left margin or press \key F9
(\key F8 on \macos) on a particular line you want the (\key F8 on \macos) on a particular line you want the
program to stop. application to stop.
\li In the \uicontrol {Breakpoint Preset} view or the \li In the \uicontrol {Breakpoint Preset} view or the
\uicontrol Breakpoints view: \uicontrol Breakpoints view:
@@ -146,24 +153,68 @@
\endlist \endlist
\li In the \uicontrol {Breakpoint type} field, select the location in the \li In the \uicontrol {Breakpoint type} field, select the location in the
program code where you want the program to stop. The other options application code where you want the application to stop.
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.
\image qtcreator-add-breakpoint.webp {Add Breakpoints} dialog
\endlist \endlist
Deselect the \uicontrol Enabled check box to make the breakpoint temporarily
inoperative as if you had deleted it, but keep the information about the
breakpoint, so that you can enable it again later.
The other options to specify depend on the location you select, such as file
name and line number, address, expression, or function name. The following
table summarizes the advanced options.
\table
\header
\li Option
\li Value
\row
\li \uicontrol Condition
\li The condition to evaluate before stopping at the breakpoint if the
condition evaluates as \c true.
\row
\li \uicontrol {Ignore count}
\li The number of times to ignore the breakpoint before the application
stops.
\row
\li \uicontrol {Thread specification}
\li
\row
\li \uicontrol Path
\li Determines how to specify the path when setting breakpoints:
\list
\li \uicontrol {Use Engine Default} is the preferred setting of
the debugger engine.
\li \uicontrol {Use Full Path} passes the full path to avoid
ambiguity if several modules contain files with the same
name. This is the engine default for CDB and LLDB.
\li \uicontrol {Use File Name} passes the file name only. This is
useful when the location of the source tree does not match
the one used when building the modules. This is the engine
default for GDB as using full paths can be slow with it.
\endlist
\row
\li \uicontrol Module
\li Specify the module (base name of the library or executable) for
function or file type breakpoints to speed up debugger startup
(CDB, LLDB).
\row
\li \uicontrol Commands
\li Commands to execute when the application stops. List one command per
line. GDB executes the commands in the order in which you specify
them.
\row
\li \uicontrol {Tracepoint only}
\li A \e tracepoint lets you log information about the application
without adding log statements or otherwise modifying your code.
You can set conditions for the tracepoint.
\row
\li \uicontrol Message
\li The tracepoint message to show in \l {Application Output}.
\endtable
\if defined(qtcreator) \if defined(qtcreator)
\section1 Specifying Breakpoint Settings \section1 Specifying Breakpoint Settings
@@ -171,6 +222,8 @@
\uicontrol Preferences > \uicontrol Debugger. For more information, \uicontrol Preferences > \uicontrol Debugger. For more information,
see \l{Debugger Preferences}. see \l{Debugger Preferences}.
\image qtcreator-debugger-general-options.png {General tab in Debugger preferences}
To use a full absolute path in breakpoints, select the To use a full absolute path in breakpoints, select the
\uicontrol {Set breakpoints using a full absolute path} check box. \uicontrol {Set breakpoints using a full absolute path} check box.
@@ -261,12 +314,12 @@
disabled breakpoint. To re-enable a breakpoint, use any of the above disabled breakpoint. To re-enable a breakpoint, use any of the above
methods. methods.
With the notable exception of data breakpoints, breakpoints retain their Other than data breakpoints retain their enabled or disabled state when the
enabled or disabled state when the debugged program is restarted. debugged application is restarted.
\section1 Setting Data Breakpoints \section1 Setting Data Breakpoints
A \e {data breakpoint} stops the program when data is read or written at the A \e {data breakpoint} stops the application when data is read or written at the
specified address. specified address.
To set a data breakpoint at an address: To set a data breakpoint at an address:
@@ -291,8 +344,8 @@
\uicontrol {Add Data Breakpoint at Object's Address} in the \uicontrol {Add Data Breakpoint at Object's Address} in the
context menu to set the data breakpoint. context menu to set the data breakpoint.
Data breakpoints will be disabled when the debugged program exits, as it Data breakpoints will be disabled when the debugged application exits, as it
is unlikely that the used addresses will stay the same at the next program is unlikely that the used addresses will stay the same at the next application
launch. If you really want a data breakpoint to be active again, re-enable launch. If you really want a data breakpoint to be active again, re-enable
it manually. it manually.
*/ */
@@ -313,7 +366,7 @@
\image qtcreator-locals.png {Locals view} \image qtcreator-locals.png {Locals view}
Whenever a program stops under the control of the debugger, it retrieves Whenever an application stops under the control of the debugger, it retrieves
information about the topmost stack frame and displays it in the information about the topmost stack frame and displays it in the
\uicontrol {Locals} view. The \uicontrol Locals pane shows \uicontrol {Locals} view. The \uicontrol Locals pane shows
information about parameters of the function in that frame as well as the information about parameters of the function in that frame as well as the
@@ -416,7 +469,7 @@
You can use the \uicontrol {Locals} and \uicontrol {Expressions} view to change 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, 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, \c QString and \c std::string when the application is interrupted. To do so,
click the \uicontrol Value column, modify the value with the inplace editor, click the \uicontrol Value column, modify the value with the inplace editor,
and press \key Enter (or \key Return). and press \key Enter (or \key Return).

View File

@@ -23,7 +23,7 @@
output is sent to the system log. To override this behavior, select output is sent to the system log. To override this behavior, select
the \uicontrol {Force logging to console} check box. This sets the \uicontrol {Force logging to console} check box. This sets
\c QT_LOGGING_TO_CONSOLE=1 in the environment of the debugged \c QT_LOGGING_TO_CONSOLE=1 in the environment of the debugged
program, which effectively prevents storing debug output in application, which effectively prevents storing debug output in
system logs. system logs.
\section1 Mapping Source Paths \section1 Mapping Source Paths
@@ -96,7 +96,7 @@
future, select the \uicontrol {Use automatic symbol cache} check box. future, select the \uicontrol {Use automatic symbol cache} check box.
To execute GDB commands after GDB has been started, but before the debugged To execute GDB commands after GDB has been started, but before the debugged
program is started or attached, and before the debugging helpers are application is started or attached, and before the debugging helpers are
initialized, enter them in the \uicontrol {Additional Startup Commands} initialized, enter them in the \uicontrol {Additional Startup Commands}
field. field.

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// ********************************************************************** // **********************************************************************
@@ -15,48 +15,57 @@
\title Setting Up Debugger \title Setting Up Debugger
The main debugger settings are associated with the The main debugger preferences are associated with the
\l{glossary-buildandrun-kit}{kit} you build and run your project with. To \l{Adding Kits}{kit} you build and run your project with. To
specify the debugger and compiler to use for each kit, select specify the debugger and compiler to use for each kit, select
\uicontrol Edit > \uicontrol Preferences > \uicontrol Kits. \uicontrol Edit > \uicontrol Preferences > \uicontrol Kits.
\image qtcreator-kits.png {Kits preferences}
You need to set up the debugger only if the automatic setup fails because You need to set up the debugger only if the automatic setup fails because
the native debugger is missing (as is usually the case for the CDB debugger the native debugger is missing (for example, you must install the CDB
on Windows, which you always must install yourself) or because the installed debugger on Windows yourself) or because \QC does not support the installed
version is not supported. For example, when your system does not have GDB version. For example, when your system does not have GDB
installed or the installed version is outdated, and you want to use a locally installed or the installed version is outdated, and you want to use a locally
installed replacement instead. installed replacement instead.
\note If you need to change the debugger to use for an automatically To change the debugger in an automatically detected kit, select
detected \l{glossary-buildandrun-kit}{kit}, you can \uicontrol Clone the \uicontrol Edit > \uicontrol Preferences > \uicontrol Kits >
kit and change the parameters in the clone. Make sure to select the cloned \uicontrol Clone to create a copy of the kit, and change the
kit for your project. parameters in the cloned kit. Make sure to enable the cloned kit
for your project.
If the debugger you want to use is not automatically detected, select If the debugger you want to use is not automatically detected, select
\uicontrol Edit > \uicontrol Preferences > \uicontrol Kits > \uicontrol Edit > \uicontrol Preferences > \uicontrol Kits >
\uicontrol Debuggers > \uicontrol Add to add it. \uicontrol Debuggers > \uicontrol Add to add it.
\note To use the debugging tools for Windows, you must install them and add \image qtcreator-preferences-kits-debuggers.webp {Debuggers tab in Kits preferences}
the Microsoft Symbol Server to the symbol search path of the
debugger. For more information, see \l{Setting CDB Paths on Windows}.
\note To use the Free Software Foundation (FSF) version of GDB on \macos, you To use the debugging tools for Windows, you must install them.
must sign it and modify your \l{glossary-buildandrun-kit}{kit} settings. Optionally, you can set up the Microsoft Symbol Server if you need
symbol information from Microsoft modules that is not found locally.
For more information, see \l{Setting CDB Paths on Windows}.
This section describes the options you have for debugging C++ code and To use the Free Software Foundation (FSF) version of GDB on \macos, you
installing the supported native debuggers. It also must sign it and modify your kit preferences.
applies for code in other compiled languages such as C, FORTRAN, Ada.
For more information on the debugger modes, see This section describes the options you have for debugging C++ and Python code
\l{Launching the Debugger in Different Modes}. and installing the supported native debuggers. It also
applies to code in other compiled languages such as C, FORTRAN, and Ada.
For more information about launching the debugger in different modes, see
\l{Debugger Operating Modes}.
\section1 Supported Native Debugger Versions \section1 Supported Native Debugger Versions
\QC supports native debuggers when working with compiled code. On \QC supports native debuggers for debugging compiled code.
most supported platforms, the GNU Symbolic Debugger GDB can be used. On On most supported platforms, you can use the GNU Symbolic Debugger (GDB).
Microsoft Windows, when using the Microsoft tool chain, the Microsoft On Microsoft Windows, when using the Microsoft tool chain, you need the
Console Debugger CDB is needed. On \macos and Linux, the LLDB debugger Microsoft Console Debugger (CDB). On \macos and Linux, you can use the LLDB
can be used. debugger. On all supported platforms, you can use PDB to debug Python source
code.
\note You need a debugger version built with Python scripting support.
The following table summarizes the support for debugging C++ code: The following table summarizes the support for debugging C++ code:
@@ -89,28 +98,26 @@
\section2 Supported GDB Versions \section2 Supported GDB Versions
Starting with version 3.1, \QC requires the Python scripting extension. GDB Use GDB 7.5, or later, with the Python scripting extension and Python version
builds without Python scripting are not supported anymore and will not work. 3.3, or later.
The minimum supported version is GDB 7.5 using Python version 2.7, or 3.3,
or newer.
For remote debugging using GDB and GDB server, the minimum supported version For remote debugging using GDB and GDB server, the minimum supported version
of GDB server on the target \l{glossary-device}{device} is 7.0. of GDB server on the target \l{glossary-device}{device} is 7.0.
\section2 Supported CDB Versions \section2 Supported CDB Versions
All versions of CDB targeting platforms supported by Qt are supported by \QC supports all versions of CDB targeting platforms that Qt supports.
\QC.
\section2 Supported LLDB Versions \section2 Supported LLDB Versions
The LLDB native debugger has similar functionality to the GDB debugger. LLDB The LLDB native debugger has similar functionality to the GDB debugger. LLDB
is the default debugger in Xcode on \macos for supporting C++ on the desktop. is the default debugger in Xcode on \macos for C++ on the desktop.
LLDB is typically used with the Clang compiler (even though you can use it LLDB is typically used with the Clang compiler (even though you can use it
with GCC, too). with GCC, too).
On \macos you can use the LLDB version delivered with Xcode or build from source. On \macos you can use the LLDB version delivered with Xcode or build from source.
The minimum supported version is LLDB 320.4. The minimum supported version is LLDB 320.4. You need a LLDB version built
with Python support.
On Linux, the minimum supported version is LLDB 3.8. On Linux, the minimum supported version is LLDB 3.8.
@@ -182,17 +189,10 @@
the required files in the required files in
\c{"%ProgramFiles%\Debugging Tools for Windows"}. \c{"%ProgramFiles%\Debugging Tools for Windows"}.
\section3 Symbol Server
We highly recommend that you add the Microsoft Symbol Server to the
symbol search path of the debugger. The Symbol Server has debugging
information for the operating system libraries for debugging Windows
applications. For more information, see \l{Setting CDB Paths on Windows}.
\section2 Debugging Tools for \macos \section2 Debugging Tools for \macos
The Qt binary distribution has both debug and release The Qt binary distribution has both debug and release
variants of the libraries. But you have to explicitly tell the variants of the libraries. However, you have to explicitly tell the
runtime linker that you want to use the debug libraries even if runtime linker that you want to use the debug libraries even if
your application is compiled as debug, as release is the default your application is compiled as debug, as release is the default
library. library.
@@ -210,6 +210,27 @@
We recommend using the LLDB version that is delivered with the latest Xcode. We recommend using the LLDB version that is delivered with the latest Xcode.
\section2 PDB
\l{https://docs.python.org/3/library/pdb.html}{PDB} is a source code debugger
for Python applications. You can use it to debug projects that have a
\l {Creating Widget-Based Qt for Python Applications}{.pyproject}
configuration file.
You must install Python and set the interpreter to use in \uicontrol Projects
> \uicontrol Run:
\image qtcreator-run-settings-python.webp {Run settings for a Python project}
Start debugging the \c main.py file. If you encounter problems, check the
active build target in the kit selector.
\QC does not support mixed-mode debugging, but you can attach GDB to the
Python interpreter to debug the C++ implementation of the corresponding
Python code. For more information, see
\l{https://doc.qt.io/qtforpython-6/tutorials/debugging/qtcreator/qtcreator.html}
{Debugging PySide with Qt Creator (Linux)}.
\section1 Setting up FSF GDB for \macos \section1 Setting up FSF GDB for \macos
To use FSF GDB on \macos, you must sign it and add it to the \QC To use FSF GDB on \macos, you must sign it and add it to the \QC
@@ -264,7 +285,7 @@
(\c $HOME/gdb72/bin/fsfgdb, but with an explicit value for (\c $HOME/gdb72/bin/fsfgdb, but with an explicit value for
\c $HOME). \c $HOME).
\li To use the debugger, add the kit in the \uicontrol {Build Settings} \li To use the debugger, enable the kit in the \uicontrol {Build Settings}
of the project. of the project.
\endlist \endlist

View File

@@ -35,7 +35,7 @@
low level virtual machine (LLVM) project, LLDB. low level virtual machine (LLVM) project, LLDB.
\li Debug QML and Java code and Qt Quick applications - \li Debug QML and Java code and Qt Quick applications -
QML/JavaScript debugger. QML/JavaScript debugger.
\li Debug Python source code - \c pdb. \li Debug Python source code - PDB.
\endlist \endlist
The following sections describe how to set up, launch, and interact with the The following sections describe how to set up, launch, and interact with the
@@ -130,44 +130,47 @@
debugger, select the \inlineimage icons/qtcreator-debug-button.png debugger, select the \inlineimage icons/qtcreator-debug-button.png
(\uicontrol {Start Debugging of Startup Project}) button or press \key F5. (\uicontrol {Start Debugging of Startup Project}) button or press \key F5.
\QC checks whether the compiled program is up-to-date, and rebuilds and \QC checks whether the compiled application is up-to-date, and rebuilds and
deploys it if you set the \uicontrol {Build before deploying} field to deploys it if you set the \uicontrol {Build before deploying} field to
build the whole project or the application to run and select he build the whole project or the application to run and select he
\uicontrol {Always deploy before running} check box in \uicontrol {Always deploy before running} check box in
\uicontrol Edit > \uicontrol Preferences > \uicontrol {Build & Run} > \uicontrol Edit > \uicontrol Preferences > \uicontrol {Build & Run} >
\uicontrol General. To debug the program without deploying \uicontrol General. To debug the application without deploying
it, select \uicontrol Debug > \uicontrol {Start Debugging} > it, select \uicontrol Debug > \uicontrol {Start Debugging} >
\uicontrol {Start Debugging Without Deployment}. \uicontrol {Start Debugging Without Deployment}.
The debugger then takes over and starts the program with suitable The debugger then takes over and starts the application with suitable
parameters. parameters.
When using GDB or CDB as debug backend, you can specify additional commands When using GDB or CDB as debug backend, you can specify additional commands
to execute before and after the backend and debugged program are started or to execute before and after the backend and debugged application are started or
attached in \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger > attached in \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger >
\uicontrol GDB and \uicontrol CDB. For more information, see \uicontrol GDB and \uicontrol CDB. For more information, see
\l{Debugger Preferences}. \l{Debugger Preferences}.
To allow reading the user's default .gdbinit file on debugger startup, To let the debugger read the user's default .gdbinit file when it starts,
select the \uicontrol {Load .gdbinit file on startup} check box in select the \uicontrol {Load .gdbinit file on startup} check box in
GDB settings. For more information, see \l{Specifying GDB Settings}. GDB settings. For more information, see \l{Specifying GDB Settings}.
\note Starting a C++ program in the debugger can take a long time, typically \note Starting a C++ application under the control of the debugger can take
in the range of several seconds to minutes if complex features are used. a long time. Typically, in the range of several seconds to minutes if you use
complex features.
\section1 Launching the Debugger in Different Modes For \l {Creating Widget-Based Qt for Python Applications}{Python} projects,
start debugging the \c main.py file. If you encounter problems, check the
active build target in the \l{Building for Multiple Platforms}{kit selector}.
\section1 Debugger Operating Modes
The debugger plugin can run the native debuggers in various operating modes The debugger plugin can run the native debuggers in various operating modes
depending on where and how the debugged process is started and run. Some of depending on where and how you start and run the debugged process. Some of
the modes are only available for a particular operating system or platform. the modes are only available for a particular operating system or platform.
In general, \key F5 and the \uicontrol {Start Debugging of Startup Project} In general, \key F5 and the \uicontrol {Start Debugging of Startup Project}
button are set up in a button start the operating mode that fits the context. So, for a C++
way to start the operating mode that is commonly used in a given context. So application that uses the \MinGW toolchain targeting desktop Windows, the GDB
if the current project is set up as a C++ application using the \MinGW engine starts in \e {start internal} mode. For a QML application that uses C++
toolchain targeting desktop Windows, the GDB engine will be started in Start plugins, a \e mixed QML/C++ engine starts, with the C++ parts being
Internal mode. If the current project is a QML application using C++
plugins, a "mixed" QML/C++ engine will be started, with the C++ parts being
handled by GDB and GDB server remote debugging. handled by GDB and GDB server remote debugging.
Change the run configuration parameters (such as Change the run configuration parameters (such as
@@ -179,24 +182,24 @@
\list \list
\li \b{Start Internal} to debug applications developed inside \QC such as \li \e{Start internal} to debug applications developed inside \QC, such as
a Qt based GUI application. a Qt Widgets-based application.
\li \b{Start External} to start and debug processes without a proper \QC \li \e{Start external} to start and debug processes without a proper \QC
project setup, either locally or on a remote machine. project setup, either locally or on a remote machine.
\li \b{Attach} to debug processes already started and running outside \li \e{Attach} to debug processes already started and running outside
\QC, either locally or on a remote machine. \QC, either locally or on a remote machine.
\li \b{Core} to debug crashed processes on Unix. \li \e{Core} to debug crashed processes on Unix.
\li \b{Post-mortem} to debug crashed processes on Windows. \li \e{Post-mortem} to debug crashed processes on Windows.
\endlist \endlist
\section2 Launching in Start Internal Mode \section2 Start Internal
Start Internal mode is the default start mode for most projects, including Start internal mode is the default start mode for most projects, including
all projects using a desktop Qt version and plain C++ projects. all projects using a desktop Qt version and plain C++ projects.
If you need a console window to operate your application, for example If you need a console window to operate your application, for example
@@ -211,19 +214,19 @@
override the console set in the Windows system environment variables. override the console set in the Windows system environment variables.
Note that the native console does not prompt on application exit. Note that the native console does not prompt on application exit.
To launch the debugger in Start Internal mode, click the To launch the debugger in start internal mode, click the
\uicontrol {Start Debugging} button for the active project. \uicontrol {Start Debugging} button for the active project.
You can specify breakpoints before or after launching the debugger. You can specify breakpoints before or after launching the debugger.
For more information, see \l{Setting Breakpoints}. For more information, see \l{Setting Breakpoints}.
\section2 Launching in Start External Mode \section2 Start External
You can debug any executable already present on your local or on a remote You can debug any executable on your local or on a remote
machine without using a project. You specify a build and run kit that machine without using a project. You specify a build and run kit that
identifies the device to debug the application on. identifies the device to debug the application on.
While this mode does not strictly require a project to be opened in \QC, While this mode does not strictly require a project to be open in \QC,
opening it makes setting breakpoints and stepping through the code easier. opening it makes setting breakpoints and stepping through the code easier.
To start and debug an external application: To start and debug an external application:
@@ -261,7 +264,7 @@
configuration to use. configuration to use.
\endlist \endlist
\section2 Launching in Attach Mode \section2 Attach
You can attach the debugger to applications that are already running or You can attach the debugger to applications that are already running or
instruct the debugger to attach to an application when it starts. instruct the debugger to attach to an application when it starts.
@@ -285,7 +288,7 @@
To terminate the selected process, select \uicontrol {Kill Process}. To terminate the selected process, select \uicontrol {Kill Process}.
While this mode does not strictly require a project to be opened in \QC, While this mode does not strictly require a project to be open in \QC,
opening it makes setting breakpoints and stepping through the code easier. opening it makes setting breakpoints and stepping through the code easier.
You can specify breakpoints before or after attaching the debugger to the You can specify breakpoints before or after attaching the debugger to the
@@ -312,14 +315,14 @@
process to start. process to start.
\endlist \endlist
\section2 Launching in Core Mode \section2 Core
The Core mode is used to inspect \e {core} files (crash dumps) that are Use the core mode to inspect \e {core} files (crash dumps) that are
generated from crashed processes on Linux and Unix systems if the system is generated from crashed processes on Linux and Unix systems if the system is
set up to allow this. set up to allow this.
To enable the dumping of core files on a Unix system, enter the following To enable the dumping of core files on a Unix system, enter the following
command in the shell from which the application will be launched: command in the shell from which the application is launched:
\code \code
ulimit -c unlimited ulimit -c unlimited
@@ -350,12 +353,12 @@
the \c sysroot to use instead of the default \c sysroot. the \c sysroot to use instead of the default \c sysroot.
\endlist \endlist
Also in this mode, using a properly configured project that has the Even though using a properly configured project that has the sources of the
sources of the crashed program is not strictly necessary, but helpful. crashed application is not strictly necessary, it is helpful.
\section2 Launching in Post-Mortem Mode \section2 Post-Mortem
The post-mortem mode is available only on Windows, if you have installed the The post-mortem mode is available only on Windows, if you installed the
debugging tools for Windows. debugging tools for Windows.
The \QC installation program asks you whether you want to register \QC as a The \QC installation program asks you whether you want to register \QC as a
@@ -365,7 +368,7 @@
You can launch the debugger in the post-mortem mode if an application You can launch the debugger in the post-mortem mode if an application
crashes on Windows. Click the \uicontrol {Debug in \QC} button in the error crashes on Windows. Click the \uicontrol {Debug in \QC} button in the error
message that is displayed by the Windows operating system. message from the Windows operating system.
*/ */
/*! /*!
@@ -552,43 +555,35 @@
\title Debug Mode Views \title Debug Mode Views
In the \uicontrol Debug mode, you can inspect the state of your In the \uicontrol Debug mode, you can inspect the state of your
application while debugging. You can interact with the debugger application while debugging.
in many ways, including the following:
\image qtcreator-debugger-views.webp {Debug mode views while debugging}
You can interact with the debugger in many ways:
\list \list
\li Go through a program line-by-line or instruction-by-instruction. \li Interrupt running applications.
\li Interrupt running programs.
\li Set breakpoints. \li Set breakpoints.
\li Step through an application line-by-line or
instruction-by-instruction.
\li Examine the contents of the call stack. \li Examine the contents of the call stack.
\li Examine and modify contents of local and global variables. \li Examine and modify contents of local and global variables.
\li Examine and modify registers and memory contents of \li Examine and modify registers and memory contents of
the debugged program. the debugged application.
\li Examine the list of loaded shared libraries. \li Examine the list of loaded shared libraries.
\li Disassemble sections of code. \li Disassemble sections of code.
\endlist \endlist
\QC displays the raw information from the native debuggers in a clear The following table summarizes the \uicontrol Debug mode views with links to
and concise manner with the goal to simplify the debugging process as much more information.
as possible without losing the power of the native debuggers.
In addition to the generic IDE functionality of the stack view, views
for locals and expressions, registers, and so on, \QC includes features to
make debugging Qt-based applications easy. The debugger plugin understands
the internal layout of several Qt classes, for example, QString, the Qt
containers, and most importantly QObject (and classes derived from it), as
well as most containers of the C++ Standard Library and some GCC extensions.
It uses this deeper understanding to present objects of such classes in a
useful way.
Interact with the program you are debugging in the following views.
\table \table
\header \header
@@ -597,12 +592,14 @@
\li Learn More \li Learn More
\row \row
\li Stack \li Stack
\li Examine the the nested function calls leading to the current position \li Examine the nested function calls leading to the current position
as a call stack trace. as a call stack trace.
\li \l {Viewing Call Stack Trace} \li \l {Viewing Call Stack Trace}
\row \row
\li Breakpoints \li Breakpoint Preset
\li Set \e {breakpoints} with conditions make the application stop in
Breakpoints
\li Set \e {breakpoints} with conditions to make the application stop in
a controlled way. A \e {watchpoint} stops the application when the a controlled way. A \e {watchpoint} stops the application when the
value of an expression changes. value of an expression changes.
\li \l {Setting Breakpoints} \li \l {Setting Breakpoints}
@@ -658,17 +655,17 @@
\section1 Managing Debug Views \section1 Managing Debug Views
The availability of views depends on whether When you are not debugging, the \uicontrol Debug mode shows the
you are debugging C++ or QML. Frequently used views are shown by \uicontrol {Debugger Preset} perspective:
default and rarely used ones are hidden. To change the default settings,
select \uicontrol View > \uicontrol Views, and then select views to
display or hide. Alternatively, you can enable or disable views from the
context menu of the title bar of any visible debug mode view.
\image qtcreator-debugger-views.png {Debug mode views} \image qtcreator-debugger-views-initial.webp {Initial Debug mode views}
You can drag and drop the views in \QC to new positions on the screen. The During debugging, the mode shows the views that you usually need to
size and position of views are saved for future sessions. Select debug C++ or QML applications. To show other views or to hide views,
select \uicontrol Views.
You can drag the views in \QC to new positions on the screen. \QC saves the
size and position of views as a perspective for future sessions. Select
\uicontrol View > \uicontrol Views > \uicontrol {Reset to Default Layout} \uicontrol View > \uicontrol Views > \uicontrol {Reset to Default Layout}
to reset the views to their original sizes and positions. to reset the views to their original sizes and positions.
@@ -680,13 +677,18 @@
\section1 Customizing Debug Views \section1 Customizing Debug Views
You can change the appearance and behavior of the debug views by specifying To change the appearance and behavior of the debug views, set preferences
settings in \uicontrol Preferences > \uicontrol Debugger. For example, you can: in \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger >
\uicontrol General.
\image qtcreator-debugger-general-options.png {General tab in Debugger preferences}
For example, you can:
\list \list
\li Use alternating row colors in debug views. \li Use alternating row colors in debug views.
\li Adopt font size changes from the main editor. \li Adopt font size changes from the main editor.
\li Have tooltips displayed in the main editor while you are debugging. \li Show tooltips in the main editor while you are debugging.
\li Close temporary source and memory views and switch to the previously \li Close temporary source and memory views and switch to the previously
used \QC mode when the debugger exits. used \QC mode when the debugger exits.
\li Bring \QC to the foreground when the debugged application is \li Bring \QC to the foreground when the debugged application is
@@ -703,17 +705,19 @@
\title Stopping Applications \title Stopping Applications
Once the program starts running under the control of the debugger, it Once the application starts running under the control of the debugger, it
behaves and performs as usual. You can interrupt a running C++ program by behaves and performs as usual.
selecting \uicontrol Debug > \uicontrol Interrupt. The program is
automatically interrupted when a breakpoint is hit.
Once the program stops, \QC: To interrupt a running C++ application, select \uicontrol Debug >
\uicontrol Interrupt. The debugger automatically interrupts
the application when it hits a \l {Setting Breakpoints}{breakpoint}.
Once the application stops, \QC:
\list \list
\li Retrieves data representing the \l{Viewing Call Stack Trace} \li Retrieves data representing the \l{Viewing Call Stack Trace}
{call stack} at the program's current position. {call stack} at the application's current position.
\li Retrieves the contents of \l{Local Variables and Function Parameters} \li Retrieves the contents of \l{Local Variables and Function Parameters}
{local variables}. {local variables}.
@@ -725,6 +729,8 @@
{Disassembler} views if you are debugging C++ based applications. {Disassembler} views if you are debugging C++ based applications.
\endlist \endlist
You can \l{Examining Data}{Examine} and change variables, set or remove
breakpoints, and then continue running the application.
*/ */
/*! /*!
@@ -753,7 +759,7 @@
\li To leave the current function or subfunction, press \key {Shift+F11} \li To leave the current function or subfunction, press \key {Shift+F11}
(\key {Command+Shift+T} on \macos). (\key {Command+Shift+T} on \macos).
\li To continue running the program, press \key F5. \li To continue running the application, press \key F5.
\li To run to the line that has the cursor, press \key {Ctrl+F10} \li To run to the line that has the cursor, press \key {Ctrl+F10}
(\key {Shift+F8} on \macos). (\key {Shift+F8} on \macos).
@@ -763,7 +769,7 @@
\endlist \endlist
You can continue executing the program until the current You can continue executing the application 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 Stepping Into Code \section1 Stepping Into Code
@@ -849,15 +855,15 @@
\omit \omit
\section2 Creating Snapshots \section2 Creating Snapshots
A snapshot has the complete state of the debugged program at a time, A snapshot has the complete state of the debugged application at a time,
including the full memory contents. including the full memory contents.
To create snapshots of a debugged program, select \uicontrol {Create Snapshot} To create snapshots of a debugged application, select \uicontrol {Create Snapshot}
in the context menu in the \uicontrol {Debugger Perspectives} view. in the context menu in the \uicontrol {Debugger Perspectives} view.
Double-click on entries in the \uicontrol {Debugger Perspectives} view to Double-click on entries in the \uicontrol {Debugger Perspectives} view to
switch between snapshots. The debug mode views are updated to reflect the state switch between snapshots. The debug mode views are updated to reflect the state
of the program at time of taking the snapshot. of the application at time of taking the snapshot.
\note Creating snapshots involves creating core files of the debugged process, \note Creating snapshots involves creating core files of the debugged process,
requiring significant amount of disk space. For details, see requiring significant amount of disk space. For details, see
@@ -873,7 +879,7 @@
\title Viewing Threads \title Viewing Threads
If a multi-threaded program is interrupted, the \uicontrol Threads view or If a multi-threaded application is interrupted, the \uicontrol Threads view or
the combobox named \uicontrol Threads in the debugger status bar can be used the combobox named \uicontrol Threads in the debugger status bar can be used
to switch from one thread to another. The \uicontrol Stack view adjusts to switch from one thread to another. The \uicontrol Stack view adjusts
itself accordingly. itself accordingly.
@@ -956,7 +962,7 @@
values of registers that recently have changed are highlighted in red and empty values of registers that recently have changed are highlighted in red and empty
register values as well as leading zeroes are grayed out. register values as well as leading zeroes are grayed out.
In addition it is possible to edit the content of registers while the program is In addition it is possible to edit the content of registers while the application is
stopped. This applies to both General-purpose and Special-purpose registers. stopped. This applies to both General-purpose and Special-purpose registers.
Registers can be edited in the standard condensed view or in their particular parts Registers can be edited in the standard condensed view or in their particular parts
if the register is displayed expanded. if the register is displayed expanded.