Merge remote-tracking branch 'origin/10.0'

Change-Id: I7bd186df0bfae7906e980e9c2c811f8dcf29750d
This commit is contained in:
Eike Ziller
2023-03-02 10:17:58 +01:00
49 changed files with 936 additions and 377 deletions

View File

@@ -43,23 +43,6 @@ function(qt5_query_qmake)
endforeach() endforeach()
endfunction() endfunction()
# Find programs:
function(_doc_find_program result_var)
if (NOT TARGET Qt::qmake)
message(FATAL_ERROR "QDoc is only available in Qt5 projects")
endif()
get_target_property(_qmake_binary Qt::qmake IMPORTED_LOCATION)
get_filename_component(_qmake_dir "${_qmake_binary}" DIRECTORY)
find_program("_prg_${result_var}" ${ARGN} HINTS "${_qmake_dir}")
if ("_prg_${result_var}" STREQUAL "_prg_${result_var}-NOTFOUND")
set("_prg_${result_var}" "${result_var}-NOTFOUND")
message(WARNING "Could not find binary for ${result_var}")
endif()
set(${result_var} "${_prg_${result_var}}" PARENT_SCOPE)
endfunction()
function(_setup_doc_targets) function(_setup_doc_targets)
# Set up important targets: # Set up important targets:
if (NOT TARGET html_docs) if (NOT TARGET html_docs)
@@ -78,6 +61,11 @@ function(_setup_qdoc_targets _qdocconf_file _retval)
cmake_parse_arguments(_arg "" "HTML_DIR;INSTALL_DIR;POSTFIX" cmake_parse_arguments(_arg "" "HTML_DIR;INSTALL_DIR;POSTFIX"
"INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS" ${ARGN}) "INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS" ${ARGN})
if (NOT TARGET Qt::qdoc)
message(WARNING "qdoc missing: No documentation targets were generated. Add find_package(Qt5 COMPONENTS Help) to CMake to enable.")
return()
endif()
foreach(_index ${_arg_INDEXES}) foreach(_index ${_arg_INDEXES})
list(APPEND _qdoc_index_args "-indexdir;${_index}") list(APPEND _qdoc_index_args "-indexdir;${_index}")
endforeach() endforeach()
@@ -90,9 +78,9 @@ function(_setup_qdoc_targets _qdocconf_file _retval)
list(APPEND _env "${_export}=${${_export}}") list(APPEND _env "${_export}=${${_export}}")
endforeach() endforeach()
set(_full_qdoc_command "${_qdoc}") get_target_property(_full_qdoc_command Qt::qdoc IMPORTED_LOCATION)
if (_env) if (_env)
set(_full_qdoc_command "${CMAKE_COMMAND}" "-E" "env" ${_env} "${_qdoc}") set(_full_qdoc_command "${CMAKE_COMMAND}" "-E" "env" ${_env} "${_full_qdoc_command}")
endif() endif()
if (_arg_HTML_DIR STREQUAL "") if (_arg_HTML_DIR STREQUAL "")
@@ -182,12 +170,6 @@ endfunction()
function(qdoc_build_qdocconf_file _qdocconf_file) function(qdoc_build_qdocconf_file _qdocconf_file)
_setup_doc_targets() _setup_doc_targets()
_doc_find_program(_qdoc NAMES qdoc qdoc-qt5)
if (_qdoc STREQUAL "_prg__qdoc-NOTFOUND")
message(WARNING "No qdoc binary found: No documentation targets were generated")
return()
endif()
cmake_parse_arguments(_arg "QCH" "HTML_DIR;QCH_DIR;INSTALL_DIR;POSTFIX" cmake_parse_arguments(_arg "QCH" "HTML_DIR;QCH_DIR;INSTALL_DIR;POSTFIX"
"INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS" ${ARGN}) "INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS" ${ARGN})
if (_arg_UNPARSED_ARGUMENTS) if (_arg_UNPARSED_ARGUMENTS)
@@ -206,7 +188,7 @@ function(qdoc_build_qdocconf_file _qdocconf_file)
FRAMEWORK_PATHS ${_arg_FRAMEWORK_PATHS} FRAMEWORK_PATHS ${_arg_FRAMEWORK_PATHS}
) )
if (_arg_QCH) if (_arg_QCH AND _html_outputdir)
_setup_qhelpgenerator_targets("${_qdocconf_file}" "${_html_outputdir}" _setup_qhelpgenerator_targets("${_qdocconf_file}" "${_html_outputdir}"
QCH_DIR "${_arg_QCH_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}") QCH_DIR "${_arg_QCH_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}")
endif() endif()

View File

@@ -29,6 +29,7 @@ Editing
### C++ ### C++
* Updated LLVM to version 16.0.0
* Added renaming of includes when renaming `.ui` files (QTCREATORBUG-14259) * Added renaming of includes when renaming `.ui` files (QTCREATORBUG-14259)
* Added automatic refactoring of C++ code when forms in `.ui` files are renamed * Added automatic refactoring of C++ code when forms in `.ui` files are renamed
(QTCREATORBUG-1179) (QTCREATORBUG-1179)
@@ -78,6 +79,7 @@ Editing
Projects Projects
-------- --------
* Moved the preference page for `Devices` to below `Kits`
* Added `Build > Run Generator` for exporting projects to other build systems * Added `Build > Run Generator` for exporting projects to other build systems
(QTCREATORBUG-28149) (QTCREATORBUG-28149)
* Added the option to browse remote file systems for remote builds and targets * Added the option to browse remote file systems for remote builds and targets
@@ -92,6 +94,8 @@ Projects
* Added the option to use `cmake-format` for CMake files * Added the option to use `cmake-format` for CMake files
([cmake-format Documentation](https://cmake-format.readthedocs.io/en/latest/)) ([cmake-format Documentation](https://cmake-format.readthedocs.io/en/latest/))
* Added the option to show advanced configure items by default * Added the option to show advanced configure items by default
* Added support for the `external` strategy for the architecture and toolset of
presets (QTCREATORBUG-28693)
* Moved `Autorun CMake` to global settings * Moved `Autorun CMake` to global settings
* Changed the environment for running CMake to be based on the build environment * Changed the environment for running CMake to be based on the build environment
by default (QTCREATORBUG-28513) by default (QTCREATORBUG-28513)
@@ -121,6 +125,15 @@ Debugging
(QTCREATORBUG-25865) (QTCREATORBUG-25865)
* Fixed highlighting in the `Disassembler` view * Fixed highlighting in the `Disassembler` view
* Fixed skipping `std::function` details when stepping * Fixed skipping `std::function` details when stepping
* Fixed an out of memory issue when debugging long lists (QTCREATORBUG-26416)
* CDB
* Fixed the printing of addresses of pointers with multiple base classes
(QTCREATORBUG-28337)
### Python
* Fixed that the debugger always interrupted at the first line in Python scripts
(QTCREATORBUG-28732)
Analyzer Analyzer
-------- --------
@@ -165,11 +178,7 @@ Platforms
### Android ### Android
* Removed service management from the manifest editor (QTCREATORBUG-28024) * Removed service management from the manifest editor (QTCREATORBUG-28024)
* Fixed `Open package location after build` (QTCREATORBUG-28791)
### Remote Linux
* Fixed that opening a file dialog unnecessarily asks for passwords for
remote devices
### Docker ### Docker

102
dist/changelog/changes-9.0.2.md vendored Normal file
View File

@@ -0,0 +1,102 @@
Qt Creator 9.0.2
================
Qt Creator version 9.0.2 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/v9.0.1..v9.0.2
General
-------
* Fixed that the UI language selection dropdown could be empty
(QTCREATORBUG-28591)
Editing
-------
* Fixed that the `delete` key on number blocks did not work with multiple
cursors (QTCREATORBUG-28584)
* Fixed a crash with snippets (QTCREATORBUG-28631)
* Fixed a freeze when pressing `Ctrl+D` (QTCREATORBUG-28709)
### C++
* Fixed the update of the code style preview (QTCREATORBUG-28621)
* Fixed some selection rendering issues in code that is not recognized by the
code model (QTCREATORBUG-28637, QTCREATORBUG-28639)
* ClangFormat
* Fixed a crash when indenting (QTCREATORBUG-28600)
### Language Server Protocol
* Fixed a wrong response that can crash language servers (QTCREATORBUG-27856,
QTCREATORBUG-28598)
Projects
--------
### CMake
* Fixed that the path to Ninja from the online installer was not passed to CMake
when using a MSVC toolchain (QTCREATORBUG-28685)
* Fixed the editing of `CMAKE_PREFIX_PATH` in the `Initial Configuration`
(QTCREATORBUG-28779)
* Presets
* Fixed that relative compiler paths in presets were not resolved correctly
(QTCREATORBUG-28602)
* Fixed that changes were not reflected in the kit (QTCREATORBUG-28609)
### Qmake
* Fixed a crash when connecting or disconnecting Android devices
(QTCREATORBUG-28370)
Test Integration
----------------
### QtTest
* Fixed the checked state in the tree
* Fixed the handling of data tags with spaces
Platforms
---------
### macOS
* Fixed that macOS could ask over and over again for permissions
(QTCREATORBUG-26705)
* Fixed that opening terminals failed on macOS 13 (QTCREATORBUG-28683)
* Fixed the detection of CMake from Homebrew on ARM Macs
### Android
* Fixed that `ANDROID_PLATFORM` was missing for NDK 23b and later
(QTCREATORBUG-28624)
### Remote Linux
* Fixed that opening a file dialog unnecessarily asked for passwords for
remote devices
Credits for these changes go to:
--------------------------------
Alexey Edelev
André Pönitz
Artem Sokolovskii
Christian Kandeler
Christian Stenger
Cristian Adam
David Schulz
Eike Ziller
Leena Miettinen
Marco Bubke
Marcus Tillmanns
Patrik Teivonen
Robert Löhning
Tim Jenssen

View File

@@ -12,5 +12,8 @@
<true/> <true/>
<key>com.apple.security.automation.apple-events</key> <key>com.apple.security.automation.apple-events</key>
<true/> <true/>
<!-- RTA needs Squish to inject itself via DYLD_* -->
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict> </dict>
</plist> </plist>

View File

@@ -35,6 +35,16 @@
the commands in the low-level build graph (like make does). For more the commands in the low-level build graph (like make does). For more
information, see \l{Setting Up Qbs}. information, see \l{Setting Up Qbs}.
To export a project to some other build system, such as Microsoft Visual
Studio, select \uicontrol Build > \uicontrol {Run Generator}, and select
a generator in the list. \QC generates the build files, such as .vcxproj,
in the project's build directory. The tool that you use to build the project
(qmake or CMake) provides the generators. Their availability depends on the
version of the build tool, host platform, and properties of the host system.
Also, a JSON compilation database generator is available if the
\l{Parsing C++ Files with the Clang Code Model}{Clang Code Model plugin}
is enabled (default).
To change the location of the project directory, and to specify settings To change the location of the project directory, and to specify settings
for building and running projects, select \uicontrol Edit > for building and running projects, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Build & Run} > \uicontrol General. \uicontrol Preferences > \uicontrol {Build & Run} > \uicontrol General.

View File

@@ -72,6 +72,19 @@
For more information about debugging Qt Quick projects, see For more information about debugging Qt Quick projects, see
\l{Setting Up QML Debugging}. \l{Setting Up QML Debugging}.
\section1 Building on Remote Devices
You can build applications on \l{Connecting Remote Linux Devices}
{remote Linux} or \l{Adding Docker Devices}{Docker} devices if you
have kits that specify the devices and toolchains to use. When the
build device of the kit is a remote device, such as a remote Linux or
Docker device, the \uicontrol Browse button next to the
\uicontrol {Build directory} field shows options for selecting remote
directories.
Also, the \uicontrol {Open Terminal} button in the
\uicontrol {Use build environment} section opens a terminal on the device.
\section1 Starting External Processes \section1 Starting External Processes
\QC executes external processes to accomplish tasks such as building \QC executes external processes to accomplish tasks such as building

View File

@@ -20,6 +20,24 @@ find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
set(QtX Qt${QT_VERSION_MAJOR}) set(QtX Qt${QT_VERSION_MAJOR})
#! [3] #! [3]
#! [5]
# Add a CMake option that enables building your plugin with tests.
# You don't want your released plugin binaries to contain tests,
# so make that default to 'NO'.
# Enable tests by passing -DWITH_TESTS=ON to CMake.
option(WITH_TESTS "Builds with tests" NO)
if(WITH_TESTS)
# Look for QtTest
find_package(${QtX} REQUIRED COMPONENTS Test)
# Tell CMake functions like add_qtc_plugin about the QtTest component.
set(IMPLICIT_DEPENDS Qt::Test)
# Enable ctest for auto tests.
enable_testing()
endif()
#! [5]
#! [4] #! [4]
add_qtc_plugin(Example add_qtc_plugin(Example
PLUGIN_DEPENDS PLUGIN_DEPENDS
@@ -36,5 +54,16 @@ add_qtc_plugin(Example
example.h example.h
example_global.h example_global.h
exampleconstants.h exampleconstants.h
examplefunctions.h
) )
#! [4] #! [4]
#! [6]
# conditionally add auto tests
if(WITH_TESTS)
add_qtc_test(tst_mytest
SOURCES tst_mytest.cpp
DEPENDS Example
)
endif()
#! [6]

View File

@@ -1,5 +1,7 @@
#include "example.h" #include "example.h"
#include "exampleconstants.h" #include "exampleconstants.h"
#include "examplefunctions.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/icontext.h> #include <coreplugin/icontext.h>
@@ -13,9 +15,31 @@
#include <QMainWindow> #include <QMainWindow>
#include <QMenu> #include <QMenu>
//! [test include]
#ifdef WITH_TESTS
#include <QtTest>
#endif
//! [test include]
namespace Example { namespace Example {
namespace Internal { namespace Internal {
//! [plugin tests]
#ifdef WITH_TESTS
class MyPluginTests : public QObject
{
Q_OBJECT
private slots:
void testMyTest()
{
// a failing test
QVERIFY(false);
}
};
#endif
//! [plugin tests]
ExamplePlugin::ExamplePlugin() ExamplePlugin::ExamplePlugin()
{ {
// Create your members // Create your members
@@ -53,6 +77,11 @@ bool ExamplePlugin::initialize(const QStringList &arguments, QString *errorStrin
Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu); Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu);
//! [add menu] //! [add menu]
//! [register tests]
#ifdef WITH_TESTS
addTest<MyPluginTests>();
#endif
//! [register tests]
return true; return true;
} }
@@ -81,4 +110,18 @@ void ExamplePlugin::triggerAction()
//! [slot implementation] //! [slot implementation]
} // namespace Internal } // namespace Internal
//! [exported function]
int addOne(int i)
{
return i; // that is wrong!
}
//! [exported function]
} // namespace Example } // namespace Example
//! [include moc]
#ifdef WITH_TESTS
#include "example.moc"
#endif
//! [include moc]

View File

@@ -1,7 +1,5 @@
#pragma once #pragma once
#include "example_global.h"
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
//! [namespaces] //! [namespaces]

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#include <qglobal.h>
#if defined(EXAMPLE_LIBRARY) #if defined(EXAMPLE_LIBRARY)
# define EXAMPLE_EXPORT Q_DECL_EXPORT # define EXAMPLE_EXPORT Q_DECL_EXPORT
#else #else

View File

@@ -0,0 +1,9 @@
#pragma once
#include "example_global.h"
namespace Example {
int EXAMPLE_EXPORT addOne(int i);
} // namespace Example

View File

@@ -0,0 +1,21 @@
#include "examplefunctions.h"
#include <QtTest>
class tst_MyTest : public QObject
{
Q_OBJECT
private slots:
void mytest();
};
void tst_MyTest::mytest()
{
// a failing test
QCOMPARE(Example::addOne(1), 2);
}
QTEST_GUILESS_MAIN(tst_MyTest)
#include "tst_mytest.moc"

View File

@@ -38,6 +38,12 @@
\li \l{Distributing Plugins} \li \l{Distributing Plugins}
\endlist \endlist
\section1 Topics
\list
\li \l{Adding Tests}
\endlist
\section1 Design Principles \section1 Design Principles
\list \list

View File

@@ -0,0 +1,103 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page plugin-tests.html
\title Adding Tests
There are two main ways of testing your plugin code:
\list
\li \l{Plugin Tests}
\li \l{Auto Tests}
\endlist
Both have their specific use cases and setup, which is described in the
following sections.
\section1 Setting up CMake
Before adding tests, prepare your build files. They need to look for the
QtTest dependency and have a CMake option for building your plugin with
tests:
\snippet exampleplugin/CMakeLists.txt 5
\section1 Plugin Tests
Plugin tests are deeply integrated into your plugin and its
interaction with \QC. To add a test for something that requires
the infrastructure of \QC or your plugin to be set up, write a plugin
test.
Plugin tests are executed by starting \QC with the \c{-test <pluginname>}
command line argument. \QC then fully loads your plugin and all the plugins
that it depends on, going through the normal \l{Plugin Life Cycle}. After
your plugin and all dependencies are fully initialized, your tests are
executed. Afterwards, \QC automatically closes. Therefore, your plugin
tests have access to all exported functionality of all \QC plugins that
your plugin depends on, like \c{Core::ICore}. Use QtTest's normal test
macros, like \c{QVERIFY} or \c{QCOMPARE} to report your test's success or
failure.
To add plugin tests, add a QObject based class with private slots for your
tests, and register it with \l{ExtensionSystem::IPlugin::addTest()} in your
plugin's \l{ExtensionSystem::IPlugin::initialized()} method. Guard all test
related code with a check for \c{WITH_TESTS}, to avoid shipping a binary
release of your plugin with test functions.
Include QtTest:
\snippet exampleplugin/example.cpp test include
Then implement the test functions:
\snippet exampleplugin/example.cpp plugin tests
Register your test in ExtensionSystem::IPlugin::initialize():
\snippet exampleplugin/example.cpp register tests
If you declared the test object in the source file, like in this example,
also include the \c{.moc} file that is required for Qt's meta object
compiler:
\snippet exampleplugin/example.cpp include moc
\section1 Auto Tests
To add a test that does not depend on a running \QC infrastructure, use an
auto test that lives independent of your plugin interface. Parsers are a
common example, but you can test many things in this way if they have been
written in a modular way.
Even though your test does not live in your plugin interface,
like with plugin tests, you can still link the test to libraries and also
your plugin library itself, to avoid code duplication or duplicate
compilation of code.
In principle you can use any auto test framework,
but QtTest is a simple one that integrates well with Qt, and is also used
for the \l{plugin tests}{Plugin Tests}.
To add your test, add the test's C++ file, and use \c{add_qtc_test} in your
CMake file to add the test target. If your test uses your plugin library,
add it as a dependency with \c{DEPENDS}.
In the following example, the plugin exports a function \c{addOne}:
\quotefile exampleplugin/examplefunctions.h
And implements it in a source file:
\snippet exampleplugin/example.cpp exported function
The test is linked against the plugin library target with \c{DEPENDS}:
\snippet exampleplugin/CMakeLists.txt 6
The QtTest based test then includes the header from the plugin and
tests the function:
\quotefile exampleplugin/tst_mytest.cpp
*/

View File

@@ -304,10 +304,10 @@ class Dumper(DumperBase):
namespaceIndex = name.find('::') namespaceIndex = name.find('::')
if namespaceIndex > 0: if namespaceIndex > 0:
namespace = name[:namespaceIndex + 2] namespace = name[:namespaceIndex + 2]
self.qtNamespace = lambda: namespace
self.qtCustomEventFunc = self.parseAndEvaluate( self.qtCustomEventFunc = self.parseAndEvaluate(
'%s!%sQObject::customEvent' % '%s!%sQObject::customEvent' %
(self.qtCoreModuleName(), namespace)).address() (self.qtCoreModuleName(), namespace)).address()
self.qtNamespace = lambda: namespace
return namespace return namespace
def qtVersion(self): def qtVersion(self):

View File

@@ -167,6 +167,7 @@ class DumperBase():
self.isGdb = False self.isGdb = False
self.isLldb = False self.isLldb = False
self.isCli = False self.isCli = False
self.isDebugBuild = None
# Later set, or not set: # Later set, or not set:
self.stringCutOff = 10000 self.stringCutOff = 10000

View File

@@ -2123,7 +2123,7 @@ def qdumpHelper__QVariant6(d, value):
d.split('HHIIIpp', metaTypeInterface) d.split('HHIIIpp', metaTypeInterface)
# Well-known simple type. # Well-known simple type.
if variantType <= 6: if variantType >= 1 and variantType <= 6:
qdumpHelper_QVariants_A[variantType](d, value) qdumpHelper_QVariants_A[variantType](d, value)
return None return None
@@ -2854,12 +2854,12 @@ def qdump_32__QJSValue(d, value):
def qdump_64__QJSValue_6(d, value): def qdump_64__QJSValue_6(d, value):
dd = value.split('Q')[0] dd = value.split('Q')[0]
typ = dd >> 47
if dd == 0: if dd == 0:
d.putValue('(undefined)') d.putValue('(undefined)')
d.putType(value.type.name + ' (undefined)') d.putType(value.type.name + ' (undefined)')
elif typ == 5: if d.qtVersion() < 0x60500:
typ = dd >> 47
if typ == 5:
d.putValue('(null)') d.putValue('(null)')
d.putType(value.type.name + ' (null)') d.putType(value.type.name + ' (null)')
elif typ == 6: elif typ == 6:
@@ -2892,6 +2892,45 @@ def qdump_64__QJSValue_6(d, value):
d.putPlainChildren(value) d.putPlainChildren(value)
return return
else:
typ = dd & 7
isPointer = typ & 1
if typ == 0:
d.putValue('(undefined)')
d.putType(value.type.name + ' (undefined)')
elif typ == 2:
d.putValue('(null)')
d.putType(value.type.name + ' (null)')
elif typ == 4:
d.putValue(dd >> 32)
d.putType(value.type.name + ' (int)')
elif typ == 6:
d.putValue('true' if dd >> 32 & 1 else 'false')
d.putType(value.type.name + ' (bool)')
elif isPointer:
pointer = dd >> 3
pointer = pointer << 3
val = d.Value(d)
val.ldata = struct.pack('q', pointer)
if typ == 1:
val._type = d.createType('double*')
d.putItem(val)
d.putType(value.type.name + ' (double)')
elif typ == 3:
val._type = d.createType('@QV4::Value*')
d.putItem(val)
d.putType(value.type.name + ' (QV4::Value)')
elif typ == 5:
val._type = d.createType('@QString*')
d.putItem(val)
d.putType(value.type.name + ' (QString)')
else:
d.putEmptyValue()
d.putItemCount(1)
d.putPlainChildren(value)
return
if d.isExpanded(): if d.isExpanded():
with Children(d): with Children(d):
with SubItem(d, '[raw]'): with SubItem(d, '[raw]'):

View File

@@ -204,11 +204,17 @@ def qdump__std__list(d, value):
def qdump__std__list__QNX(d, value): def qdump__std__list__QNX(d, value):
if d.isDebugBuild is None:
try: try:
_ = value["_Mypair"]["_Myval2"]["_Myproxy"] _ = value["_Mypair"]["_Myval2"]["_Myproxy"]
(proxy, head, size) = value.split("ppp") d.isDebugBuild = True
except Exception: except Exception:
d.isDebugBuild = False
if d.isDebugBuild:
(proxy, head, size) = value.split("ppp")
else:
(head, size) = value.split("pp") (head, size) = value.split("pp")
d.putItemCount(size, 1000) d.putItemCount(size, 1000)
if d.isExpanded(): if d.isExpanded():
@@ -271,10 +277,15 @@ def qdump__std__map(d, value):
def qdump_std__map__helper(d, value): def qdump_std__map__helper(d, value):
if d.isDebugBuild is None:
try: try:
_ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"] _ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"]
(proxy, head, size) = value.split("ppp") d.isDebugBuild = True
except Exception: except Exception:
d.isDebugBuild = False
if d.isDebugBuild:
(proxy, head, size) = value.split("ppp")
else:
(head, size) = value.split("pp") (head, size) = value.split("pp")
d.check(0 <= size and size <= 100 * 1000 * 1000) d.check(0 <= size and size <= 100 * 1000 * 1000)
d.putItemCount(size) d.putItemCount(size)
@@ -450,10 +461,15 @@ def qdump__std__set(d, value):
def qdump__std__set__QNX(d, value): def qdump__std__set__QNX(d, value):
if d.isDebugBuild is None:
try: try:
_ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"] _ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"]
(proxy, head, size) = value.split("ppp") d.isDebugBuild = True
except Exception: except Exception:
d.isDebugBuild = False
if d.isDebugBuild:
(proxy, head, size) = value.split("ppp")
else:
(head, size) = value.split("pp") (head, size) = value.split("pp")
d.check(0 <= size and size <= 100 * 1000 * 1000) d.check(0 <= size and size <= 100 * 1000 * 1000)
d.putItemCount(size) d.putItemCount(size)
@@ -576,24 +592,28 @@ def qdumpHelper__std__string__QNX(d, value, charType, format):
def qdumpHelper__std__string__MSVC(d, value, charType, format): def qdumpHelper__std__string__MSVC(d, value, charType, format):
if d.isDebugBuild is None:
try: try:
_ = value["_Mypair"]["_Myval2"]["_Myproxy"] _ = value["_Mypair"]["_Myval2"]["_Myproxy"]
(proxy, buffer, size, alloc) = value.split("p16spp") d.isDebugBuild = True
except Exception: except Exception:
proxy = None d.isDebugBuild = False
if d.isDebugBuild:
(_, buffer, size, alloc) = value.split("p16spp")
else:
(buffer, size, alloc) = value.split("16spp") (buffer, size, alloc) = value.split("16spp")
d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000)
_BUF_SIZE = int(16 / charType.size()) _BUF_SIZE = int(16 / charType.size())
if _BUF_SIZE <= alloc: if _BUF_SIZE <= alloc:
if proxy is None: if d.isDebugBuild:
data = value.extractPointer()
else:
(proxy, data) = value.split("pp") (proxy, data) = value.split("pp")
else: else:
if proxy is None: data = value.extractPointer()
data = value.address()
else: else:
if d.isDebugBuild:
data = value.address() + d.ptrSize() data = value.address() + d.ptrSize()
else:
data = value.address()
d.putCharArrayHelper(data, size, charType, format) d.putCharArrayHelper(data, size, charType, format)
@@ -656,10 +676,15 @@ def qdump__std__unordered_map(d, value):
if d.isMsvcTarget(): if d.isMsvcTarget():
_list = value["_List"] _list = value["_List"]
if d.isDebugBuild is None:
try: try:
_ = _list["_Mypair"]["_Myval2"]["_Myproxy"] _ = _list["_Mypair"]["_Myval2"]["_Myproxy"]
(_, start, size) = _list.split("ppp") d.isDebugBuild = True
except Exception: except Exception:
d.isDebugBuild = False
if d.isDebugBuild:
(_, start, size) = _list.split("ppp")
else:
(start, size) = _list.split("pp") (start, size) = _list.split("pp")
else: else:
try: try:
@@ -894,18 +919,28 @@ def qdumpHelper__std__vector__libcxx(d, value):
def qdumpHelper__std__vector__msvc(d, value): def qdumpHelper__std__vector__msvc(d, value):
inner_type = value.type[0] inner_type = value.type[0]
if inner_type.name == "bool": if inner_type.name == "bool":
if d.isDebugBuild is None:
try: try:
_ = value["_Myproxy"] _ = value["_Myproxy"]
proxy1, proxy2, start, finish, alloc, size = value.split("pppppi") d.isDebugBuild = True
except RuntimeError: except RuntimeError:
d.isDebugBuild = False
if d.isDebugBuild:
proxy1, proxy2, start, finish, alloc, size = value.split("pppppi")
else:
start, finish, alloc, size = value.split("pppi") start, finish, alloc, size = value.split("pppi")
d.check(0 <= size and size <= 1000 * 1000 * 1000) d.check(0 <= size and size <= 1000 * 1000 * 1000)
qdumpHelper__std__vector__bool(d, start, size, inner_type) qdumpHelper__std__vector__bool(d, start, size, inner_type)
else: else:
if d.isDebugBuild is None:
try: try:
_ = value["_Mypair"]["_Myval2"]["_Myproxy"] _ = value["_Mypair"]["_Myval2"]["_Myproxy"]
proxy, start, finish, alloc = value.split("pppp") d.isDebugBuild = True
except RuntimeError: except RuntimeError:
d.isDebugBuild = False
if d.isDebugBuild:
proxy, start, finish, alloc = value.split("pppp")
else:
start, finish, alloc = value.split("ppp") start, finish, alloc = value.split("ppp")
size = (finish - start) // inner_type.size() size = (finish - start) // inner_type.size()
d.check(0 <= size and size <= 1000 * 1000 * 1000) d.check(0 <= size and size <= 1000 * 1000 * 1000)

View File

@@ -11302,8 +11302,8 @@ Påvirket brudpunkter er %1</translation>
<translation>Dereferencér pegere automatisk</translation> <translation>Dereferencér pegere automatisk</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;Dette skifter Locals og expressions-visningen til automatisk at dereferencere pegere. Det gemmer et niveau i trævisningen men mister også data for det nu manglende mellemliggende niveau.</translation> <translation>Dette skifter Locals og expressions-visningen til automatisk at dereferencere pegere. Det gemmer et niveau i trævisningen men mister også data for det nu manglende mellemliggende niveau.</translation>
</message> </message>
<message> <message>
<source>Show &quot;std::&quot; Namespace in Types</source> <source>Show &quot;std::&quot; Namespace in Types</source>
@@ -11314,8 +11314,8 @@ Påvirket brudpunkter er %1</translation>
<translation>Vis &quot;std::&quot;-navnerum i typer</translation> <translation>Vis &quot;std::&quot;-navnerum i typer</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation>&lt;p&gt;Viser &quot;std::&quot;-præfiks for typer fra standardbiblioteket.</translation> <translation>Viser &quot;std::&quot;-præfiks for typer fra standardbiblioteket.</translation>
</message> </message>
<message> <message>
<source>Show Qt&apos;s Namespace in Types</source> <source>Show Qt&apos;s Namespace in Types</source>
@@ -11326,16 +11326,16 @@ Påvirket brudpunkter er %1</translation>
<translation>Vis Qt&apos;s navnerum i typer</translation> <translation>Vis Qt&apos;s navnerum i typer</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation>&lt;p&gt;Viser Qt-navnerum-præfiks for Qt-typer. Dette er kun relevant hvis Qt blev konfigureret med &quot;-qtnamespace&quot;.</translation> <translation>Viser Qt-navnerum-præfiks for Qt-typer. Dette er kun relevant hvis Qt blev konfigureret med &quot;-qtnamespace&quot;.</translation>
</message> </message>
<message> <message>
<source>Show QObject names if available</source> <source>Show QObject names if available</source>
<translation>Vis QObject-navne, hvis tilgængelige</translation> <translation>Vis QObject-navne, hvis tilgængelige</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation>&lt;p&gt;Viser objectName-egenskaben af QObject-baseret punkter. Bemærk at det kan påvirke fejlretter-ydelse negativt selv hvis der ikke er nogen QObjects.</translation> <translation>Viser objectName-egenskaben af QObject-baseret punkter. Bemærk at det kan påvirke fejlretter-ydelse negativt selv hvis der ikke er nogen QObjects.</translation>
</message> </message>
<message> <message>
<source>Sort Members of Classes and Structs Alphabetically</source> <source>Sort Members of Classes and Structs Alphabetically</source>
@@ -11354,12 +11354,12 @@ Påvirket brudpunkter er %1</translation>
<translation>Brug kodemodel</translation> <translation>Brug kodemodel</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation>&lt;p&gt;Valg af dette gør at C++-kodemodellen bliver spurgt efter variabel område-information. Det resultere måske i en smule hurtigere fejlretningshandling men kan mislykkes ved optimeret kode.</translation> <translation>Valg af dette gør at C++-kodemodellen bliver spurgt efter variabel område-information. Det resultere måske i en smule hurtigere fejlretningshandling men kan mislykkes ved optimeret kode.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation>&lt;p&gt;Viser navne af QThread-baseret tråde.</translation> <translation>Viser navne af QThread-baseret tråde.</translation>
</message> </message>
<message> <message>
<source>Display thread names</source> <source>Display thread names</source>
@@ -11374,8 +11374,8 @@ Påvirket brudpunkter er %1</translation>
<translation>Juster brudpunkt placeringer</translation> <translation>Juster brudpunkt placeringer</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation>&lt;p&gt;Ikke alle kildekodelinjer genererer eksekverbar kode. Sættes et brudpunkt sådan en linje vil det virke som hvis brudpunktet blev sat den næste linje der genererede kode. Valg af &apos;Juster brudpunkt placeringer&apos; skifter de røde brudpunktsmarkører til placeringen af det ægte brudpunkt.</translation> <translation>Ikke alle kildekodelinjer genererer eksekverbar kode. Sættes et brudpunkt sådan en linje vil det virke som hvis brudpunktet blev sat den næste linje der genererede kode. Valg af &apos;Juster brudpunkt placeringer&apos; skifter de røde brudpunktsmarkører til placeringen af det ægte brudpunkt.</translation>
</message> </message>
<message> <message>
<source>Break on &quot;throw&quot;</source> <source>Break on &quot;throw&quot;</source>
@@ -11466,12 +11466,12 @@ Påvirket brudpunkter er %1</translation>
<translation>Register til efter-død fejlretning</translation> <translation>Register til efter-død fejlretning</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Den maksimale længde af strenge-entiteter i Locals og expressions-ruden. Længere strenge afkortes og vises med udeladelsesprikker.</translation> <translation>Den maksimale længde af strenge-entiteter i Locals og expressions-ruden. Længere strenge afkortes og vises med udeladelsesprikker.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Den maksimale længde af strenge i separate vinduer. Længere strenge afkortes og vises med udeladelsesprikker.</translation> <translation>Den maksimale længde af strenge i separate vinduer. Længere strenge afkortes og vises med udeladelsesprikker.</translation>
</message> </message>
<message> <message>
<source>Reload Full Stack</source> <source>Reload Full Stack</source>

View File

@@ -2556,8 +2556,8 @@ Trotzdem fortfahren?</translation>
<translation>Zeiger automatisch dereferenzieren</translation> <translation>Zeiger automatisch dereferenzieren</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;Weist den Debugger an, automatisch dereferenzierte Zeiger anzuzeigen. Dadurch ist die Baumansicht flacher, aber weniger detailreich.</translation> <translation>Weist den Debugger an, automatisch dereferenzierte Zeiger anzuzeigen. Dadurch ist die Baumansicht flacher, aber weniger detailreich.</translation>
</message> </message>
<message> <message>
<source>Additional arguments:</source> <source>Additional arguments:</source>
@@ -2584,8 +2584,8 @@ Trotzdem fortfahren?</translation>
<translation>&quot;std::&quot;-Namensraum in Typnamen anzeigen</translation> <translation>&quot;std::&quot;-Namensraum in Typnamen anzeigen</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation>&lt;p&gt;Zeigt das &quot;std::&quot;-Präfix für Datentypen aus der Standardbibliothek an.</translation> <translation>Zeigt das &quot;std::&quot;-Präfix für Datentypen aus der Standardbibliothek an.</translation>
</message> </message>
<message> <message>
<source>Show Qt&apos;s Namespace in Types</source> <source>Show Qt&apos;s Namespace in Types</source>
@@ -2596,16 +2596,16 @@ Trotzdem fortfahren?</translation>
<translation>Qt-Namensraum in Typnamen anzeigen</translation> <translation>Qt-Namensraum in Typnamen anzeigen</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation>&lt;p&gt;Qt-Namensraum bei Datentypen aus Qt anzeigen. Das ist nur relevant, wenn Qt mit &apos;-qtnamespace&apos; konfiguriert wurde.</translation> <translation>Qt-Namensraum bei Datentypen aus Qt anzeigen. Das ist nur relevant, wenn Qt mit &apos;-qtnamespace&apos; konfiguriert wurde.</translation>
</message> </message>
<message> <message>
<source>Show QObject names if available</source> <source>Show QObject names if available</source>
<translation>Falls möglich QObject-Namen anzeigen</translation> <translation>Falls möglich QObject-Namen anzeigen</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation>&lt;p&gt;Zeigt die objectName-Eigenschaft von QObject basierten Elementen an. Dies kann die Debugger-Geschwindigkeit verschlechtern, selbst wenn keine QObjects benutzt werden.</translation> <translation>Zeigt die objectName-Eigenschaft von QObject basierten Elementen an. Dies kann die Debugger-Geschwindigkeit verschlechtern, selbst wenn keine QObjects benutzt werden.</translation>
</message> </message>
<message> <message>
<source>Sort Members of Classes and Structs Alphabetically</source> <source>Sort Members of Classes and Structs Alphabetically</source>
@@ -2624,24 +2624,24 @@ Trotzdem fortfahren?</translation>
<translation>Codemodell verwenden</translation> <translation>Codemodell verwenden</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation>&lt;p&gt;Benutzt das Codemodell, um Informationen bezüglich des Gültigkeitsbereiches von Variablen zu erhalten. Dies kann eine etwas schnellere Anzeige der Werte bewirken, aber bei optimiertem Code auch fehlschlagen.</translation> <translation>Benutzt das Codemodell, um Informationen bezüglich des Gültigkeitsbereiches von Variablen zu erhalten. Dies kann eine etwas schnellere Anzeige der Werte bewirken, aber bei optimiertem Code auch fehlschlagen.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation>&lt;p&gt;Zeigt Namen der Threads an, die auf QThread basieren.</translation> <translation>Zeigt Namen der Threads an, die auf QThread basieren.</translation>
</message> </message>
<message> <message>
<source>Display thread names</source> <source>Display thread names</source>
<translation>Namen von Threads anzeigen</translation> <translation>Namen von Threads anzeigen</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation>&lt;p&gt;Nicht aus allen Quellcode-Zeilen wird ausführbarer Code erzeugt. Wenn man auf solche Zeilen einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre, aus der Maschinencode erzeugt wurde. Das Aktivieren der Einstellung &apos;Positionen der Haltepunkte korrigieren&apos; bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird.</translation> <translation>Nicht aus allen Quellcode-Zeilen wird ausführbarer Code erzeugt. Wenn man auf solche Zeilen einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre, aus der Maschinencode erzeugt wurde. Das Aktivieren der Einstellung &apos;Positionen der Haltepunkte korrigieren&apos; bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Die maximale Länge von Zeichenketten in separaten Fenstern. Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt.</translation> <translation>Die maximale Länge von Zeichenketten in separaten Fenstern. Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt.</translation>
</message> </message>
<message> <message>
<source>Synchronize Breakpoints</source> <source>Synchronize Breakpoints</source>
@@ -2700,8 +2700,8 @@ Trotzdem fortfahren?</translation>
<translation>Rückwärts Debuggen aktivieren</translation> <translation>Rückwärts Debuggen aktivieren</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Die maximale Länge von Zeichenketten in &quot;Lokale Variablen&quot; und &quot;Ausdrücke&quot;. Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt.</translation> <translation>Die maximale Länge von Zeichenketten in &quot;Lokale Variablen&quot; und &quot;Ausdrücke&quot;. Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt.</translation>
</message> </message>
<message> <message>
<source>Reload Full Stack</source> <source>Reload Full Stack</source>
@@ -6044,8 +6044,8 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
<translation>Annotationen im Haupt-Editor beim Debuggen benutzen</translation> <translation>Annotationen im Haupt-Editor beim Debuggen benutzen</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows simple variable values as annotations in the main editor during debugging.</source> <source>Shows simple variable values as annotations in the main editor during debugging.</source>
<translation>&lt;p&gt;Zeigt Werte von einfachen Variablen als Annotation im Haupt-Editor beim Debuggen.</translation> <translation>Zeigt Werte von einfachen Variablen als Annotation im Haupt-Editor beim Debuggen.</translation>
</message> </message>
<message> <message>
<source>Use pseudo message tracepoints</source> <source>Use pseudo message tracepoints</source>
@@ -6064,20 +6064,20 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
<translation>GDB kann automatisch eine Kopie seines Symbolindexes in einem Cache auf der Festplatte erstellen und ihn von dort wiederherstellen, wenn derselbe Binärcode in der Zukunft geladen wird.</translation> <translation>GDB kann automatisch eine Kopie seines Symbolindexes in einem Cache auf der Festplatte erstellen und ihn von dort wiederherstellen, wenn derselbe Binärcode in der Zukunft geladen wird.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</source> <source>Enables tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</source>
<translation>&lt;p&gt;Aktiviert Tooltips für Variablenwerte beim Debuggen. Da dies das Debuggen verlangsamen kann und wegen der fehlenden Gültigkeitsinformationen nicht zuverlässig ist, ist es standardmäßig deaktiviert.</translation> <translation>Aktiviert Tooltips für Variablenwerte beim Debuggen. Da dies das Debuggen verlangsamen kann und wegen der fehlenden Gültigkeitsinformationen nicht zuverlässig ist, ist es standardmäßig deaktiviert.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips in the locals view during debugging.</source> <source>Enables tooltips in the locals view during debugging.</source>
<translation>&lt;p&gt;Aktiviert Tooltips für die Anzeige &amp;quot;Lokale Variablen&amp;quot; beim Debuggen.</translation> <translation>Aktiviert Tooltips für die Anzeige &amp;quot;Lokale Variablen&amp;quot; beim Debuggen.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips in the breakpoints view during debugging.</source> <source>Enables tooltips in the breakpoints view during debugging.</source>
<translation>&lt;p&gt;Aktiviert Tooltips für die Anzeige &amp;quot;Haltepunkte&amp;quot; beim Debuggen.</translation> <translation>Aktiviert Tooltips für die Anzeige &amp;quot;Haltepunkte&amp;quot; beim Debuggen.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips in the stack view during debugging.</source> <source>Enables tooltips in the stack view during debugging.</source>
<translation>&lt;p&gt;Aktiviert Tooltips für die Anzeige &amp;quot;Stack&amp;quot; beim Debuggen.</translation> <translation>Aktiviert Tooltips für die Anzeige &amp;quot;Stack&amp;quot; beim Debuggen.</translation>
</message> </message>
<message> <message>
<source>Shows QML object tree in Locals and Expressions when connected and not stepping.</source> <source>Shows QML object tree in Locals and Expressions when connected and not stepping.</source>

View File

@@ -16000,8 +16000,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Show &quot;std::&quot; Namespace in Types</source> <source>Show &quot;std::&quot; Namespace in Types</source>
@@ -16012,8 +16012,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation> &quot;std::&quot; </translation> <translation> &quot;std::&quot; </translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation>&lt;p&gt; &quot;std::&quot; </translation> <translation> &quot;std::&quot; </translation>
</message> </message>
<message> <message>
<source>Show Qt&apos;s Namespace in Types</source> <source>Show Qt&apos;s Namespace in Types</source>
@@ -16024,16 +16024,16 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation> Qt </translation> <translation> Qt </translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation>&lt;p&gt;Qt Qt Qt &apos;-qtnamespace&apos; configure </translation> <translation>Qt Qt Qt &apos;-qtnamespace&apos; configure </translation>
</message> </message>
<message> <message>
<source>Show QObject names if available</source> <source>Show QObject names if available</source>
<translation> QObject </translation> <translation> QObject </translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation>&lt;p&gt;QObject objectName 注意: QObject 使</translation> <translation>QObject objectName 注意: QObject 使</translation>
</message> </message>
<message> <message>
<source>Sort Members of Classes and Structs Alphabetically</source> <source>Sort Members of Classes and Structs Alphabetically</source>
@@ -16048,12 +16048,12 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation>&lt;p&gt; C++ </translation> <translation> C++ </translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation>&lt;p&gt;QThread </translation> <translation>QThread </translation>
</message> </message>
<message> <message>
<source>Synchronize Breakpoints</source> <source>Synchronize Breakpoints</source>
@@ -16064,8 +16064,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation>調</translation> <translation>調</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation>&lt;p&gt;&apos;調&apos; </translation> <translation>&apos;調&apos; </translation>
</message> </message>
<message> <message>
<source>Break on &quot;throw&quot;</source> <source>Break on &quot;throw&quot;</source>
@@ -16136,8 +16136,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation>&lt;p&gt;</translation> <translation>&lt;p&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Show Address Data in Breakpoints View when Debugging</source> <source>Show Address Data in Breakpoints View when Debugging</source>
@@ -16172,8 +16172,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation>&lt;p&gt;</translation> <translation>&lt;p&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Reload Full Stack</source> <source>Reload Full Stack</source>
@@ -16192,8 +16192,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行
<translation>&lt;p&gt;1</translation> <translation>&lt;p&gt;1</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Display thread names</source> <source>Display thread names</source>

View File

@@ -3590,8 +3590,8 @@ Kontynuować?</translation>
<translation>Pokazuj przestrzeń nazw &quot;std::&quot; w widoku typów</translation> <translation>Pokazuj przestrzeń nazw &quot;std::&quot; w widoku typów</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation>&lt;p&gt;Pokazuje przedrostek &quot;std::&quot; dla typów z biblioteki standardowej.</translation> <translation>Pokazuje przedrostek &quot;std::&quot; dla typów z biblioteki standardowej.</translation>
</message> </message>
<message> <message>
<source>Show Qt&apos;s Namespace in Types</source> <source>Show Qt&apos;s Namespace in Types</source>
@@ -3602,8 +3602,8 @@ Kontynuować?</translation>
<translation>Pokazuj przestrzeń nazw Qt w widoku typów</translation> <translation>Pokazuj przestrzeń nazw Qt w widoku typów</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation>&lt;p&gt;Pokazuje przestrzeń nazw Qt dla typów Qt. To ma zastosowanie jedynie dla Qt skonfigurowanego z &quot;-qtnamespace&quot;.</translation> <translation>Pokazuje przestrzeń nazw Qt dla typów Qt. To ma zastosowanie jedynie dla Qt skonfigurowanego z &quot;-qtnamespace&quot;.</translation>
</message> </message>
<message> <message>
<source>Sort Members of Classes and Structs Alphabetically</source> <source>Sort Members of Classes and Structs Alphabetically</source>
@@ -3618,8 +3618,8 @@ Kontynuować?</translation>
<translation>Używaj programów pomocniczych debuggera</translation> <translation>Używaj programów pomocniczych debuggera</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation>&lt;p&gt;Nie wszystkie linie kodu źródłowego generują kod wykonywalny. Ustawienie pułapki w takiej linii spowoduje, że zostanie ona ustawiona de facto w najbliższej kolejnej linii generującej kod wykonywalny. <translation>Nie wszystkie linie kodu źródłowego generują kod wykonywalny. Ustawienie pułapki w takiej linii spowoduje, że zostanie ona ustawiona de facto w najbliższej kolejnej linii generującej kod wykonywalny.
&quot;Poprawiaj położenie pułapek&quot; przesuwa czerwone znaczniki pułapek w miejsca prawdziwych pułapek w takich przypadkach.</translation> &quot;Poprawiaj położenie pułapek&quot; przesuwa czerwone znaczniki pułapek w miejsca prawdziwych pułapek w takich przypadkach.</translation>
</message> </message>
<message> <message>
@@ -3643,12 +3643,12 @@ Kontynuować?</translation>
<translation>&lt;p&gt;Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku stosu podczas debugowania.</translation> <translation>&lt;p&gt;Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku stosu podczas debugowania.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Maksymalna długość ciągów znakowych w widoku &quot;Zmienne lokalne i wyrażenia&quot;. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem.</translation> <translation>Maksymalna długość ciągów znakowych w widoku &quot;Zmienne lokalne i wyrażenia&quot;. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Maksymalna długość ciągów znakowych w oddzielnych oknach. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem.</translation> <translation>Maksymalna długość ciągów znakowych w oddzielnych oknach. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem.</translation>
</message> </message>
<message> <message>
<source>Configure Debugger...</source> <source>Configure Debugger...</source>
@@ -3667,28 +3667,28 @@ Kontynuować?</translation>
<translation>Rozmiar czcionki debuggera wzięty z głównego edytora</translation> <translation>Rozmiar czcionki debuggera wzięty z głównego edytora</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;Włącza automatyczne wyłuskiwanie wskaźników w widoku ze zmiennymi lokalnymi i obserwowanymi. Brak jednego poziomu w widoku upraszcza go, ale jednocześnie powoduje utratę danych w brakującym poziomie pośrednim.</translation> <translation>Włącza automatyczne wyłuskiwanie wskaźników w widoku ze zmiennymi lokalnymi i obserwowanymi. Brak jednego poziomu w widoku upraszcza go, ale jednocześnie powoduje utratę danych w brakującym poziomie pośrednim.</translation>
</message> </message>
<message> <message>
<source>Show QObject names if available</source> <source>Show QObject names if available</source>
<translation>Pokazuj dostępne nazwy QObject&apos;ów</translation> <translation>Pokazuj dostępne nazwy QObject&apos;ów</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation>&lt;p&gt;Pokazuje wartość właściwości &quot;objectName&quot; obiektów dziedziczących z QObject. Może to negatywnie wpłynąć na wydajność debuggera, nawet gdy żadne obiekty nie będą wyświetlane.</translation> <translation>Pokazuje wartość właściwości &quot;objectName&quot; obiektów dziedziczących z QObject. Może to negatywnie wpłynąć na wydajność debuggera, nawet gdy żadne obiekty nie będą wyświetlane.</translation>
</message> </message>
<message> <message>
<source>Use code model</source> <source>Use code model</source>
<translation>Używaj modelu kodu</translation> <translation>Używaj modelu kodu</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation>&lt;p&gt;Wybranie tej opcji spowoduje pobieranie informacji o zakresie zmiennych z modelu kodu C++. Może to przyspieszyć działanie debuggera, lecz również może to spowodować niepoprawne działanie dla zoptymalizowanego kodu.</translation> <translation>Wybranie tej opcji spowoduje pobieranie informacji o zakresie zmiennych z modelu kodu C++. Może to przyspieszyć działanie debuggera, lecz również może to spowodować niepoprawne działanie dla zoptymalizowanego kodu.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation>&lt;p&gt;Wyświetla nazwy wątków dziedziczących z QThread.</translation> <translation>Wyświetla nazwy wątków dziedziczących z QThread.</translation>
</message> </message>
<message> <message>
<source>Display thread names</source> <source>Display thread names</source>

View File

@@ -14462,8 +14462,8 @@ Affected are breakpoints %1</source>
<translation>Автоматически разыменовывать указатели</translation> <translation>Автоматически разыменовывать указатели</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;Переключает обзоры Переменных и выражений в режим автоматического разыменовывания указателей. Позволяет сократить размер дерева, но при этом теряются данные промежуточного уровня.</translation> <translation>Переключает обзоры Переменных и выражений в режим автоматического разыменовывания указателей. Позволяет сократить размер дерева, но при этом теряются данные промежуточного уровня.</translation>
</message> </message>
<message> <message>
<source>Show &quot;std::&quot; Namespace in Types</source> <source>Show &quot;std::&quot; Namespace in Types</source>
@@ -14474,8 +14474,8 @@ Affected are breakpoints %1</source>
<translation>Показывать пространство имён «std::» в типах</translation> <translation>Показывать пространство имён «std::» в типах</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation>&lt;p&gt;Отображение приставки «std::» для типов стандартной библиотеки.</translation> <translation>Отображение приставки «std::» для типов стандартной библиотеки.</translation>
</message> </message>
<message> <message>
<source>Show Qt&apos;s Namespace in Types</source> <source>Show Qt&apos;s Namespace in Types</source>
@@ -14486,16 +14486,16 @@ Affected are breakpoints %1</source>
<translation>Показывать пространство имён Qt в типах</translation> <translation>Показывать пространство имён Qt в типах</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation>&lt;p&gt;Отображать приставку пространства имён Qt для типов Qt. Имеет смысл только тогда, когда Qt собран с параметром «-qtnamespace».</translation> <translation>Отображать приставку пространства имён Qt для типов Qt. Имеет смысл только тогда, когда Qt собран с параметром «-qtnamespace».</translation>
</message> </message>
<message> <message>
<source>Show QObject names if available</source> <source>Show QObject names if available</source>
<translation>Показывать доступные имена QObject</translation> <translation>Показывать доступные имена QObject</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation>&lt;p&gt;Отображает свойство objectName производных от QObject объектов. Может негативно сказаться на скорости работы отладчика, даже если нет подобных объектов.</translation> <translation>Отображает свойство objectName производных от QObject объектов. Может негативно сказаться на скорости работы отладчика, даже если нет подобных объектов.</translation>
</message> </message>
<message> <message>
<source>Sort Members of Classes and Structs Alphabetically</source> <source>Sort Members of Classes and Structs Alphabetically</source>
@@ -14514,28 +14514,28 @@ Affected are breakpoints %1</source>
<translation>Использовать модель кода</translation> <translation>Использовать модель кода</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation>&lt;p&gt;Включение приведёт к запросам модели кода C++ об области видимости переменной. Это может немного ускорить работу отладчика, но может и сбоить на оптимизированном коде.</translation> <translation>Включение приведёт к запросам модели кода C++ об области видимости переменной. Это может немного ускорить работу отладчика, но может и сбоить на оптимизированном коде.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation>&lt;p&gt;Отображать названия потоков, основанных на QThread.</translation> <translation>Отображать названия потоков, основанных на QThread.</translation>
</message> </message>
<message> <message>
<source>Display thread names</source> <source>Display thread names</source>
<translation>Отображать названия потоков</translation> <translation>Отображать названия потоков</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation>&lt;p&gt;Не все строки исходника приводят к созданию кода. Размещение на такой строке точки останова фактически приведёт к установке её на ближайшую последующую строку, создавшую код. Выбор «Подстраивать размещение точек останова» сдвинет красные метки на строки, где они фактически сработают.</translation> <translation>Не все строки исходника приводят к созданию кода. Размещение на такой строке точки останова фактически приведёт к установке её на ближайшую последующую строку, создавшую код. Выбор «Подстраивать размещение точек останова» сдвинет красные метки на строки, где они фактически сработают.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Checking this will enable tooltips in the stack view during debugging.</source> <source>&lt;p&gt;Checking this will enable tooltips in the stack view during debugging.</source>
<translation>&lt;p&gt;Включает на время отладки всплывающие подсказки в обзоре стека.</translation> <translation>&lt;p&gt;Включает на время отладки всплывающие подсказки в обзоре стека.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Максимальная длина строки в отдельных окнах. Более длинные строки обрезаются и завершаются многоточием.</translation> <translation>Максимальная длина строки в отдельных окнах. Более длинные строки обрезаются и завершаются многоточием.</translation>
</message> </message>
<message> <message>
<source>Synchronize Breakpoints</source> <source>Synchronize Breakpoints</source>
@@ -14602,8 +14602,8 @@ Affected are breakpoints %1</source>
<translation>Зарегистрировать системным отладчиком</translation> <translation>Зарегистрировать системным отладчиком</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Максимальная длина строковых значений в обзорах переменных и выражений. Более длинные строки обрезаются и завершаются многоточием.</translation> <translation>Максимальная длина строковых значений в обзорах переменных и выражений. Более длинные строки обрезаются и завершаются многоточием.</translation>
</message> </message>
<message> <message>
<source>Reload Full Stack</source> <source>Reload Full Stack</source>

View File

@@ -5047,8 +5047,8 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<translation>Розіменовувати вказівники автоматично</translation> <translation>Розіменовувати вказівники автоматично</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation>&lt;p&gt;Вмикає автоматичне розіменування вказівників у перегляді локальних змінних та виразів. Цим зберігається один рівень у відображенні деревом, однак втрачаються дані з проміжного рівня, що тепер буде відсутнім.</translation> <translation>Вмикає автоматичне розіменування вказівників у перегляді локальних змінних та виразів. Цим зберігається один рівень у відображенні деревом, однак втрачаються дані з проміжного рівня, що тепер буде відсутнім.</translation>
</message> </message>
<message> <message>
<source>Show &quot;std::&quot; Namespace in Types</source> <source>Show &quot;std::&quot; Namespace in Types</source>
@@ -5066,10 +5066,6 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<source>Use Code Model</source> <source>Use Code Model</source>
<translation type="vanished">Використовувати модель коду</translation> <translation type="vanished">Використовувати модель коду</translation>
</message> </message>
<message>
<source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation type="vanished">Вмикання призводить до запитів до моделі коду C++ за інформацією про область видимості змінної. Це може призвести до дещо швидшого зневадження, але може не спрацьовувати для оптимізованого коду.</translation>
</message>
<message> <message>
<source>Break on &quot;abort&quot;</source> <source>Break on &quot;abort&quot;</source>
<translation>Перепиняти на &quot;abort&quot;</translation> <translation>Перепиняти на &quot;abort&quot;</translation>
@@ -5150,10 +5146,6 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<source>Adjust Breakpoint Locations</source> <source>Adjust Breakpoint Locations</source>
<translation>Підправляти розташування точок перепину</translation> <translation>Підправляти розташування точок перепину</translation>
</message> </message>
<message>
<source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation type="vanished">Не всі рядки тексту програми створюють виконуваний код. Встановлення точки перепину на такому рядку фактично встановить її на наступному рядку, що генерує код. В таких випадках вибір &apos;Підправляти розташування точок перепину&apos; зміщує червоні позначки точок перепину до справжнього розташування точок перепину.</translation>
</message>
<message> <message>
<source>&lt;p&gt;This switches the debugger to native-mixed operation mode. In this mode, stepping and data display will be handled by the native debugger backend (GDB, LLDB or CDB) for C++, QML and JS sources.</source> <source>&lt;p&gt;This switches the debugger to native-mixed operation mode. In this mode, stepping and data display will be handled by the native debugger backend (GDB, LLDB or CDB) for C++, QML and JS sources.</source>
<translation type="vanished">&lt;p&gt;Перемикає зневаджувач в рідний-змішаний режим роботи. В цьому режимі крокування та відображення даних здійснюється рідним рушієм зневадження (GDB, LLDB або CDB) для коду C++, QML та JS.</translation> <translation type="vanished">&lt;p&gt;Перемикає зневаджувач в рідний-змішаний режим роботи. В цьому режимі крокування та відображення даних здійснюється рідним рушієм зневадження (GDB, LLDB або CDB) для коду C++, QML та JS.</translation>
@@ -5167,24 +5159,24 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<translation>Показувати простір імен &quot;std::&quot; в типах</translation> <translation>Показувати простір імен &quot;std::&quot; в типах</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation>&lt;p&gt;Показувати префікс &quot;std::&quot; для типів зі стандартної бібліотеки.</translation> <translation>Показувати префікс &quot;std::&quot; для типів зі стандартної бібліотеки.</translation>
</message> </message>
<message> <message>
<source>Show Qt&apos;s namespace in types</source> <source>Show Qt&apos;s namespace in types</source>
<translation>Показувати простір імен Qt в типах</translation> <translation>Показувати простір імен Qt в типах</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation>&lt;p&gt;Показувати префікс простору імен Qt для типів Qt. Це має сенс, якщо Qt було сконфігуровано з &apos;-qtnamespace&apos;.</translation> <translation>Показувати префікс простору імен Qt для типів Qt. Це має сенс, якщо Qt було сконфігуровано з &apos;-qtnamespace&apos;.</translation>
</message> </message>
<message> <message>
<source>Show QObject names if available</source> <source>Show QObject names if available</source>
<translation>Показувати назви QObject-ів, якщо можливо</translation> <translation>Показувати назви QObject-ів, якщо можливо</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation>&lt;p&gt;Відображення властивості objectName елементів, що походять від QObject. Майте на увазі, що це може мати негативний вплив на швидкодію зневаджувача, навіть якщо QObject-и відсутні.</translation> <translation>Відображення властивості objectName елементів, що походять від QObject. Майте на увазі, що це може мати негативний вплив на швидкодію зневаджувача, навіть якщо QObject-и відсутні.</translation>
</message> </message>
<message> <message>
<source>Sort members of classes and structs alphabetically</source> <source>Sort members of classes and structs alphabetically</source>
@@ -5195,20 +5187,20 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<translation>Використовувати модель коду</translation> <translation>Використовувати модель коду</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation>&lt;p&gt;Вмикання призводить до запитів до моделі коду C++ за інформацією про область видимості змінної. Це може призвести до дещо швидшого зневадження, але може не спрацьовувати для оптимізованого коду.</translation> <translation>Вмикання призводить до запитів до моделі коду C++ за інформацією про область видимості змінної. Це може призвести до дещо швидшого зневадження, але може не спрацьовувати для оптимізованого коду.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation>&lt;p&gt;Показувати назви ниток, що базуються на QThread.</translation> <translation>Показувати назви ниток, що базуються на QThread.</translation>
</message> </message>
<message> <message>
<source>Display thread names</source> <source>Display thread names</source>
<translation>Показувати імена ниток</translation> <translation>Показувати імена ниток</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation>&lt;p&gt;Не всі рядки тексту програми створюють виконуваний код. Встановлення точки перепину на такому рядку фактично встановить її на наступному рядку, що генерує код. В таких випадках вибір &apos;Підправляти розташування точок перепину&apos; зміщує червоні позначки точок перепину до справжнього розташування точок перепину.</translation> <translation>Не всі рядки тексту програми створюють виконуваний код. Встановлення точки перепину на такому рядку фактично встановить її на наступному рядку, що генерує код. В таких випадках вибір &apos;Підправляти розташування точок перепину&apos; зміщує червоні позначки точок перепину до справжнього розташування точок перепину.</translation>
</message> </message>
<message> <message>
<source>Break on &quot;throw&quot;</source> <source>Break on &quot;throw&quot;</source>
@@ -5243,12 +5235,12 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<translation>&lt;p&gt;Вмикає відображення стовпця з інформацією про адресу в перегляді стека під час зневадження.</translation> <translation>&lt;p&gt;Вмикає відображення стовпця з інформацією про адресу в перегляді стека під час зневадження.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Максимальна довжина рядка елементу в панелі &quot;Локальні змінні та вирази&quot;. Довші рядки будуть обрізані та відображені з трикрапкою.</translation> <translation>Максимальна довжина рядка елементу в панелі &quot;Локальні змінні та вирази&quot;. Довші рядки будуть обрізані та відображені з трикрапкою.</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation>&lt;p&gt;Максимальна довжина рядків в відокремлених вікнах. Довші рядки будуть обрізані та відображені з трикрапкою.</translation> <translation>Максимальна довжина рядків в відокремлених вікнах. Довші рядки будуть обрізані та відображені з трикрапкою.</translation>
</message> </message>
<message> <message>
<source>Checking this will enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</source> <source>Checking this will enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</source>
@@ -5294,14 +5286,6 @@ Qt Creator не може під&apos;єднатись до нього.</translat
<source>Register For Post-Mortem Debugging</source> <source>Register For Post-Mortem Debugging</source>
<translation>Зареєструвати для посмертного зневадження</translation> <translation>Зареєструвати для посмертного зневадження</translation>
</message> </message>
<message>
<source>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation type="vanished">Максимальна довжина рядка елементу в панелі &quot;Локальні змінні та вирази&quot;. Довші рядки будуть обрізані та відображені з трикрапкою.</translation>
</message>
<message>
<source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation type="vanished">Максимальна довжина рядків в відокремлених вікнах. Довші рядки будуть обрізані та відображені з трикрапкою.</translation>
</message>
<message> <message>
<source>Reload Full Stack</source> <source>Reload Full Stack</source>
<translation>Перезавантажити повний стек</translation> <translation>Перезавантажити повний стек</translation>
@@ -35714,14 +35698,6 @@ Install an SDK of at least API version %1.</source>
<source>Makes use of Qt Creator&apos;s code model to find out if a variable has already been assigned a value at the point the debugger interrupts.</source> <source>Makes use of Qt Creator&apos;s code model to find out if a variable has already been assigned a value at the point the debugger interrupts.</source>
<translation type="vanished">Вмикає використання моделі коду Qt Creator для з&apos;ясування того, чи змінній вже було присвоєно значення в момент зупинки зневаджувача.</translation> <translation type="vanished">Вмикає використання моделі коду Qt Creator для з&apos;ясування того, чи змінній вже було присвоєно значення в момент зупинки зневаджувача.</translation>
</message> </message>
<message>
<source>Displays names of QThread based threads.</source>
<translation type="vanished">Показувати назви ниток, що базуються на QThread.</translation>
</message>
<message>
<source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation type="vanished">Показувати префікс &quot;std::&quot; для типів зі стандартної бібліотеки.</translation>
</message>
<message> <message>
<source>Show &quot;std::&quot; namespace for types</source> <source>Show &quot;std::&quot; namespace for types</source>
<translation type="vanished">Показувати простір імен &quot;std::&quot; для типів</translation> <translation type="vanished">Показувати простір імен &quot;std::&quot; для типів</translation>

View File

@@ -15668,7 +15668,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source> <source>This switches the Locals and Expressions views to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15708,7 +15708,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows &quot;std::&quot; prefix for types from the standard library.</source> <source>Shows &quot;std::&quot; prefix for types from the standard library.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15716,7 +15716,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source> <source>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15724,7 +15724,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source> <source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15732,15 +15732,15 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source> <source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Displays names of QThread based threads.</source> <source>Displays names of QThread based threads.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> <source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15836,7 +15836,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Shows simple variable values as annotations in the main editor during debugging.</source> <source>Shows simple variable values as annotations in the main editor during debugging.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15856,15 +15856,15 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</source> <source>Enables tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips in the locals view during debugging.</source> <source>Enables tooltips in the locals view during debugging.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips in the breakpoints view during debugging.</source> <source>Enables tooltips in the breakpoints view during debugging.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15872,7 +15872,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Enables tooltips in the stack view during debugging.</source> <source>Enables tooltips in the stack view during debugging.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15892,7 +15892,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source> <source>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -15900,7 +15900,7 @@ Install the &quot;Qt Debug Information Files&quot; Package from the Maintenance
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source> <source>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@@ -75,8 +75,9 @@ if (_library_enabled)
else() else()
set(PythonZipFileName "python${CMAKE_MATCH_4}.zip") set(PythonZipFileName "python${CMAKE_MATCH_4}.zip")
endif() endif()
set(PythonNameWithVersion "${CMAKE_MATCH_3}")
set(PythonDll "${CMAKE_MATCH_1}/${CMAKE_MATCH_3}${CMAKE_SHARED_LIBRARY_SUFFIX}") set(PythonDll "${CMAKE_MATCH_1}/${PythonNameWithVersion}${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(PythonExe "${CMAKE_MATCH_1}/python${CMAKE_EXECUTABLE_SUFFIX}") set(PythonExe "${CMAKE_MATCH_1}/python${CMAKE_EXECUTABLE_SUFFIX}")
set(PythonZip "${CMAKE_MATCH_1}/${PythonZipFileName}") set(PythonZip "${CMAKE_MATCH_1}/${PythonZipFileName}")
@@ -92,6 +93,76 @@ if (_library_enabled)
return() return()
endif() endif()
# Support for cross-compilation for arm64 on a x64 system
if (MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARM" AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^AMD")
find_program(dumpbin_executable dumpbin)
find_program(lib_executable lib)
string(TOLOWER ${MSVC_CXX_ARCHITECTURE_ID} lower_arch_name)
if (NOT dumpbin_executable OR NOT lib_executable)
message(WARNING "Couldn't locate dumpbin.exe or lib.exe executables")
return()
endif()
if (Python3_VERSION VERSION_LESS "3.11.0")
message(WARNING "Python 3.11.0 needs to be installed. This version is the first version that has arm64 Windows support")
return()
endif()
execute_process(
COMMAND ${dumpbin_executable} /exports ${PythonDll}
OUTPUT_VARIABLE dumpbin_output
RESULT_VARIABLE dumpbin_result)
string(REGEX REPLACE ".*[ \t]+ordinal[ \t]+hint[ \t]+RVA[ \t]+name[\r\n][\r\n]" "" dumpbin_output "${dumpbin_output}")
string(REGEX REPLACE "[\r\n][ \t]+Summary[\r\n].*" "" dumpbin_output "${dumpbin_output}")
string(REGEX REPLACE "([ \t]+[0-9]+)([ \t]+[a-fA-F0-9]+)([ \t]+[a-fA-F0-9]+)[ \t]+([a-zA-Z0-9_]+)( = [a-zA-Z0-9_]+[\r\n]|[\r\n])" "\\4;" filter_output "${dumpbin_output}")
string(APPEND pythondef "LIBRARY ${PythonNameWithVersion}\nEXPORTS\n")
foreach(var IN LISTS filter_output)
if (var)
string(APPEND pythondef "${var}\n")
endif()
endforeach()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${PythonNameWithVersion}.def "${pythondef}")
execute_process(
COMMAND ${lib_executable}
/def:${CMAKE_CURRENT_BINARY_DIR}/${PythonNameWithVersion}.def
/out:${CMAKE_CURRENT_BINARY_DIR}/${PythonNameWithVersion}.lib /machine:${lower_arch_name} /nologo)
set(Python3_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/${PythonNameWithVersion}.lib")
if (NOT PythonTargetArchDll AND ENV{PythonTargetArchDll})
set(PythonTargetArchDll $ENV{PythonTargetArchDll})
endif()
if (NOT PythonTargetArchDll)
set(python_embed_url "https://www.python.org/ftp/python/${Python3_VERSION}/python-${Python3_VERSION}-embed-${lower_arch_name}.zip")
message(STATUS "Downloading ${python_embed_url}")
foreach(retry RANGE 10)
file(DOWNLOAD ${python_embed_url} ${CMAKE_CURRENT_BINARY_DIR}/python-embed.zip)
file(SIZE ${CMAKE_CURRENT_BINARY_DIR}/python-embed.zip fileSize)
if (fileSize GREATER 0)
break()
endif()
endforeach()
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python-embed)
file(ARCHIVE_EXTRACT INPUT ${CMAKE_CURRENT_BINARY_DIR}/python-embed.zip DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/python-embed)
set(PythonTargetArchDll ${CMAKE_CURRENT_BINARY_DIR}/python-embed/${PythonNameWithVersion}${CMAKE_SHARED_LIBRARY_SUFFIX})
endif()
if (NOT PythonTargetArchDll)
message(WARNING "PythonTargetArchDll CMake parameter or ENV{PythonTargetArchDll} was not configured and the Python runtime cannot be configured")
return()
endif()
set(PythonDll "${PythonTargetArchDll}")
endif()
extend_qtc_library(qtcreatorcdbext extend_qtc_library(qtcreatorcdbext
DEPENDS "${Python3_LIBRARIES}" DEPENDS "${Python3_LIBRARIES}"
INCLUDES "${Python3_INCLUDE_DIRS}" INCLUDES "${Python3_INCLUDE_DIRS}"

View File

@@ -197,6 +197,23 @@ QString TestResultItem::resultString() const
return m_summaryResult->failed ? QString("FAIL") : QString("PASS"); return m_summaryResult->failed ? QString("FAIL") : QString("PASS");
} }
//! \return true if descendant types have changed, false otherwise
bool TestResultItem::updateDescendantTypes(ResultType t)
{
if (t == ResultType::TestStart || t == ResultType::TestEnd) // these are special
return false;
if (m_descendantsTypes.contains(t))
return false;
m_descendantsTypes.insert(t);
return true;
}
bool TestResultItem::descendantTypesContainsAnyOf(const QSet<ResultType> &types) const
{
return !m_descendantsTypes.isEmpty() && m_descendantsTypes.intersects(types);
}
/********************************* TestResultModel *****************************************/ /********************************* TestResultModel *****************************************/
TestResultModel::TestResultModel(QObject *parent) TestResultModel::TestResultModel(QObject *parent)
@@ -217,7 +234,8 @@ void TestResultModel::updateParent(const TestResultItem *item)
return; return;
bool changed = false; bool changed = false;
parentItem->updateResult(changed, item->testResult().result(), item->summaryResult()); parentItem->updateResult(changed, item->testResult().result(), item->summaryResult());
if (!changed) bool changedType = parentItem->updateDescendantTypes(item->testResult().result());
if (!changed && !changedType)
return; return;
emit dataChanged(parentItem->index(), parentItem->index()); emit dataChanged(parentItem->index(), parentItem->index());
updateParent(parentItem); updateParent(parentItem);
@@ -426,10 +444,6 @@ TestResultFilterModel::TestResultFilterModel(TestResultModel *sourceModel, QObje
{ {
setSourceModel(sourceModel); setSourceModel(sourceModel);
enableAllResultTypes(true); enableAllResultTypes(true);
// instead of using invalidate() from results pane when adding a new result ( QTBUG-103952 )
connect(sourceModel, &QAbstractItemModel::rowsInserted,
this, &TestResultFilterModel::invalidateFilter);
} }
void TestResultFilterModel::enableAllResultTypes(bool enabled) void TestResultFilterModel::enableAllResultTypes(bool enabled)
@@ -441,7 +455,7 @@ void TestResultFilterModel::enableAllResultTypes(bool enabled)
<< ResultType::MessageFatal << ResultType::Invalid << ResultType::BlacklistedPass << ResultType::MessageFatal << ResultType::Invalid << ResultType::BlacklistedPass
<< ResultType::BlacklistedFail << ResultType::BlacklistedXFail << ResultType::BlacklistedXPass << ResultType::BlacklistedFail << ResultType::BlacklistedXFail << ResultType::BlacklistedXPass
<< ResultType::Benchmark << ResultType::Benchmark
<< ResultType::MessageCurrentTest << ResultType::TestStart << ResultType::TestEnd << ResultType::MessageCurrentTest
<< ResultType::MessageInfo << ResultType::MessageSystem << ResultType::Application << ResultType::MessageInfo << ResultType::MessageSystem << ResultType::Application
<< ResultType::MessageError; << ResultType::MessageError;
} else { } else {
@@ -499,33 +513,20 @@ bool TestResultFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &s
QModelIndex index = m_sourceModel->index(sourceRow, 0, sourceParent); QModelIndex index = m_sourceModel->index(sourceRow, 0, sourceParent);
if (!index.isValid()) if (!index.isValid())
return false; return false;
const ResultType resultType = m_sourceModel->testResult(index).result(); const ResultType resultType = m_sourceModel->testResult(index).result();
if (resultType == ResultType::TestStart) { if (resultType == ResultType::TestStart) {
TestResultItem *item = m_sourceModel->itemForIndex(index); auto item = m_sourceModel->itemForIndex(index);
QTC_ASSERT(item, return false); return item && item->descendantTypesContainsAnyOf(m_enabled);
if (!item->summaryResult()) } else if (resultType == ResultType::TestEnd) {
return true; auto item = m_sourceModel->itemForIndex(index);
return acceptTestCaseResult(index); if (!item)
}
return m_enabled.contains(resultType);
}
bool TestResultFilterModel::acceptTestCaseResult(const QModelIndex &srcIndex) const
{
for (int row = 0, count = m_sourceModel->rowCount(srcIndex); row < count; ++row) {
const QModelIndex &child = m_sourceModel->index(row, 0, srcIndex);
TestResultItem *item = m_sourceModel->itemForIndex(child);
const ResultType type = item->testResult().result();
if (type == ResultType::TestStart) {
if (!item->summaryResult())
return true;
if (acceptTestCaseResult(child))
return true;
} else if (m_enabled.contains(type))
return true;
}
return false; return false;
auto parent = item->parent();
return parent && parent->descendantTypesContainsAnyOf(m_enabled);
}
return m_enabled.contains(resultType);
} }
} // namespace Internal } // namespace Internal

View File

@@ -44,8 +44,12 @@ public:
QString resultString() const; QString resultString() const;
std::optional<SummaryEvaluation> summaryResult() const { return m_summaryResult; } std::optional<SummaryEvaluation> summaryResult() const { return m_summaryResult; }
bool updateDescendantTypes(ResultType t);
bool descendantTypesContainsAnyOf(const QSet<ResultType> &types) const;
private: private:
TestResult m_testResult; TestResult m_testResult;
QSet<ResultType> m_descendantsTypes;
std::optional<SummaryEvaluation> m_summaryResult; std::optional<SummaryEvaluation> m_summaryResult;
}; };
@@ -99,7 +103,6 @@ protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
private: private:
bool acceptTestCaseResult(const QModelIndex &srcIndex) const;
TestResultModel *m_sourceModel; TestResultModel *m_sourceModel;
QSet<ResultType> m_enabled; QSet<ResultType> m_enabled;
}; };

View File

@@ -107,6 +107,7 @@ TestResultsPane::TestResultsPane(QObject *parent) :
m_model = new TestResultModel(this); m_model = new TestResultModel(this);
m_filterModel = new TestResultFilterModel(m_model, this); m_filterModel = new TestResultFilterModel(m_model, this);
m_filterModel->setDynamicSortFilter(true); m_filterModel->setDynamicSortFilter(true);
m_filterModel->setRecursiveFilteringEnabled(true);
m_treeView->setModel(m_filterModel); m_treeView->setModel(m_filterModel);
TestResultDelegate *trd = new TestResultDelegate(this); TestResultDelegate *trd = new TestResultDelegate(this);
m_treeView->setItemDelegate(trd); m_treeView->setItemDelegate(trd);

View File

@@ -502,6 +502,10 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
updateInitialCMakeArguments(); updateInitialCMakeArguments();
}); });
connect(m_buildSystem->target()->project(), &Project::aboutToSaveSettings, this, [this] {
updateInitialCMakeArguments();
});
connect(bc->aspect<InitialCMakeArgumentsAspect>(), connect(bc->aspect<InitialCMakeArgumentsAspect>(),
&Utils::BaseAspect::labelLinkActivated, &Utils::BaseAspect::labelLinkActivated,
this, this,

View File

@@ -24,9 +24,18 @@ FilePath PatchTool::patchCommand()
QSettings *s = ICore::settings(); QSettings *s = ICore::settings();
s->beginGroup(settingsGroupC); s->beginGroup(settingsGroupC);
const FilePath command = FilePath::fromSettings(s->value(patchCommandKeyC, patchCommandDefaultC)); FilePath command = FilePath::fromSettings(s->value(patchCommandKeyC, patchCommandDefaultC));
s->endGroup(); s->endGroup();
if (HostOsInfo::isWindowsHost() && command.path() == patchCommandDefaultC) {
const QSettings settings(R"(HKEY_LOCAL_MACHINE\SOFTWARE\GitForWindows)",
QSettings::NativeFormat);
const FilePath gitInstall = FilePath::fromUserInput(settings.value("InstallPath").toString());
if (gitInstall.exists())
command = command.searchInPath({gitInstall.pathAppended("usr/bin")},
Utils::FilePath::PrependToPath);
}
return command; return command;
} }

View File

@@ -364,12 +364,16 @@ static FilePath getClangHeadersPath(const FilePath &clangdFilePath)
const QVersionNumber version = Utils::clangdVersion(clangdFilePath); const QVersionNumber version = Utils::clangdVersion(clangdFilePath);
QTC_ASSERT(!version.isNull(), return {}); QTC_ASSERT(!version.isNull(), return {});
static const QStringList libDirs{"lib", "lib64"}; static const QStringList libDirs{"lib", "lib64"};
const QStringList versionStrings{QString::number(version.majorVersion()), version.toString()};
for (const QString &libDir : libDirs) { for (const QString &libDir : libDirs) {
const FilePath includePath = clangdFilePath.absolutePath().parentDir().pathAppended(libDir) for (const QString &versionString : versionStrings) {
.pathAppended("clang").pathAppended(version.toString()).pathAppended("include"); const FilePath includePath = clangdFilePath.absolutePath().parentDir()
.pathAppended(libDir).pathAppended("clang")
.pathAppended(versionString).pathAppended("include");
if (includePath.exists()) if (includePath.exists())
return includePath; return includePath;
} }
}
QTC_CHECK(false); QTC_CHECK(false);
return {}; return {};
} }

View File

@@ -1274,9 +1274,15 @@ void CdbEngine::showScriptMessages(const QString &message) const
{ {
GdbMi gdmiMessage; GdbMi gdmiMessage;
gdmiMessage.fromString(message); gdmiMessage.fromString(message);
if (!gdmiMessage.isValid()) if (gdmiMessage.isValid())
showScriptMessages(gdmiMessage);
else
showMessage(message, LogMisc); showMessage(message, LogMisc);
for (const GdbMi &msg : gdmiMessage["msg"]) { }
void CdbEngine::showScriptMessages(const GdbMi &message) const
{
for (const GdbMi &msg : message["msg"]) {
if (msg.name() == "bridgemessage") if (msg.name() == "bridgemessage")
showMessage(msg["msg"].data(), LogMisc); showMessage(msg["msg"].data(), LogMisc);
else else
@@ -2085,11 +2091,11 @@ void CdbEngine::handleExtensionMessage(char t, int token, const QString &what, c
if (t == 'R') { if (t == 'R') {
response.resultClass = ResultDone; response.resultClass = ResultDone;
response.data.fromString(message); response.data.fromString(message);
if (!response.data.isValid()) { if (response.data.isValid()) {
showScriptMessages(response.data);
} else {
response.data.m_data = message; response.data.m_data = message;
response.data.m_type = GdbMi::Tuple; response.data.m_type = GdbMi::Tuple;
} else {
showScriptMessages(message);
} }
} else { } else {
response.resultClass = ResultError; response.resultClass = ResultError;
@@ -2273,6 +2279,19 @@ void CdbEngine::parseOutputLine(QString line)
while (isCdbPrompt(line)) while (isCdbPrompt(line))
line.remove(0, CdbPromptLength); line.remove(0, CdbPromptLength);
// An extension notification (potentially consisting of several chunks) // An extension notification (potentially consisting of several chunks)
if (!m_initialSessionIdleHandled && line.startsWith("SECURE: File not allowed to be loaded")
&& line.endsWith("qtcreatorcdbext.dll")) {
CheckableMessageBox::doNotShowAgainInformation(
Core::ICore::dialogParent(),
Tr::tr("Debugger Start Failed"),
Tr::tr("The system prevents loading of %1 which is required for debugging. "
"Make sure that your antivirus solution is up to date and if that does not work "
"consider to add an exception for %1.")
.arg(m_extensionFileName),
Core::ICore::settings(),
"SecureInfoCdbextCannotBeLoaded");
notifyEngineSetupFailed();
}
static const QString creatorExtPrefix = "<qtcreatorcdbext>|"; static const QString creatorExtPrefix = "<qtcreatorcdbext>|";
if (line.startsWith(creatorExtPrefix)) { if (line.startsWith(creatorExtPrefix)) {
// "<qtcreatorcdbext>|type_char|token|remainingChunks|serviceName|message" // "<qtcreatorcdbext>|type_char|token|remainingChunks|serviceName|message"

View File

@@ -137,6 +137,7 @@ private:
void postResolveSymbol(const QString &module, const QString &function, void postResolveSymbol(const QString &module, const QString &function,
DisassemblerAgent *agent); DisassemblerAgent *agent);
void showScriptMessages(const QString &message) const; void showScriptMessages(const QString &message) const;
void showScriptMessages(const GdbMi &message) const;
void handleInitialSessionIdle(); void handleInitialSessionIdle();
// Builtin commands // Builtin commands
void handleStackTrace(const DebuggerResponse &); void handleStackTrace(const DebuggerResponse &);

View File

@@ -122,7 +122,9 @@ DebuggerSettings::DebuggerSettings()
autoDerefPointers.setLabelText(Tr::tr("Dereference Pointers Automatically")); autoDerefPointers.setLabelText(Tr::tr("Dereference Pointers Automatically"));
autoDerefPointers.setDefaultValue(true); autoDerefPointers.setDefaultValue(true);
autoDerefPointers.setSettingsKey(debugModeGroup, "AutoDerefPointers"); autoDerefPointers.setSettingsKey(debugModeGroup, "AutoDerefPointers");
autoDerefPointers.setToolTip(Tr::tr("<p>This switches the Locals and Expressions views to " autoDerefPointers.setToolTip(
"<p>"
+ Tr::tr("This switches the Locals and Expressions views to "
"automatically dereference pointers. This saves a level in the " "automatically dereference pointers. This saves a level in the "
"tree view, but also loses data for the now-missing intermediate " "tree view, but also loses data for the now-missing intermediate "
"level.")); "level."));
@@ -186,20 +188,24 @@ DebuggerSettings::DebuggerSettings()
showStdNamespace.setDefaultValue(true); showStdNamespace.setDefaultValue(true);
showStdNamespace.setDisplayName(Tr::tr("Show \"std::\" Namespace in Types")); showStdNamespace.setDisplayName(Tr::tr("Show \"std::\" Namespace in Types"));
showStdNamespace.setLabelText(Tr::tr("Show \"std::\" namespace in types")); showStdNamespace.setLabelText(Tr::tr("Show \"std::\" namespace in types"));
showStdNamespace.setToolTip(Tr::tr("<p>Shows \"std::\" prefix for types from the standard library.")); showStdNamespace.setToolTip(
"<p>" + Tr::tr("Shows \"std::\" prefix for types from the standard library."));
showQtNamespace.setSettingsKey(debugModeGroup, "ShowQtNamespace"); showQtNamespace.setSettingsKey(debugModeGroup, "ShowQtNamespace");
showQtNamespace.setDefaultValue(true); showQtNamespace.setDefaultValue(true);
showQtNamespace.setDisplayName(Tr::tr("Show Qt's Namespace in Types")); showQtNamespace.setDisplayName(Tr::tr("Show Qt's Namespace in Types"));
showQtNamespace.setLabelText(Tr::tr("Show Qt's namespace in types")); showQtNamespace.setLabelText(Tr::tr("Show Qt's namespace in types"));
showQtNamespace.setToolTip(Tr::tr("<p>Shows Qt namespace prefix for Qt types. This is only " showQtNamespace.setToolTip("<p>"
+ Tr::tr("Shows Qt namespace prefix for Qt types. This is only "
"relevant if Qt was configured with \"-qtnamespace\".")); "relevant if Qt was configured with \"-qtnamespace\"."));
showQObjectNames.setSettingsKey(debugModeGroup, "ShowQObjectNames2"); showQObjectNames.setSettingsKey(debugModeGroup, "ShowQObjectNames2");
showQObjectNames.setDefaultValue(true); showQObjectNames.setDefaultValue(true);
showQObjectNames.setDisplayName(Tr::tr("Show QObject names if available")); showQObjectNames.setDisplayName(Tr::tr("Show QObject names if available"));
showQObjectNames.setLabelText(Tr::tr("Show QObject names if available")); showQObjectNames.setLabelText(Tr::tr("Show QObject names if available"));
showQObjectNames.setToolTip(Tr::tr("<p>Displays the objectName property of QObject based items. " showQObjectNames.setToolTip(
"<p>"
+ Tr::tr("Displays the objectName property of QObject based items. "
"Note that this can negatively impact debugger performance " "Note that this can negatively impact debugger performance "
"even if no QObjects are present.")); "even if no QObjects are present."));
@@ -218,14 +224,15 @@ DebuggerSettings::DebuggerSettings()
useCodeModel.setSettingsKey(debugModeGroup, "UseCodeModel"); useCodeModel.setSettingsKey(debugModeGroup, "UseCodeModel");
useCodeModel.setDefaultValue(true); useCodeModel.setDefaultValue(true);
useCodeModel.setLabelText(Tr::tr("Use code model")); useCodeModel.setLabelText(Tr::tr("Use code model"));
useCodeModel.setToolTip(Tr::tr("<p>Selecting this causes the C++ Code Model being asked " useCodeModel.setToolTip(
"<p>"
+ Tr::tr("Selecting this causes the C++ Code Model being asked "
"for variable scope information. This might result in slightly faster " "for variable scope information. This might result in slightly faster "
"debugger operation but may fail for optimized code.")); "debugger operation but may fail for optimized code."));
showThreadNames.setSettingsKey(debugModeGroup, "ShowThreadNames"); showThreadNames.setSettingsKey(debugModeGroup, "ShowThreadNames");
showThreadNames.setLabelText(Tr::tr("Display thread names")); showThreadNames.setLabelText(Tr::tr("Display thread names"));
showThreadNames.setToolTip(Tr::tr("<p>Displays names of QThread based threads.")); showThreadNames.setToolTip("<p>" + Tr::tr("Displays names of QThread based threads."));
// //
// Breakpoints // Breakpoints
@@ -233,7 +240,9 @@ DebuggerSettings::DebuggerSettings()
synchronizeBreakpoints.setLabelText(Tr::tr("Synchronize Breakpoints")); synchronizeBreakpoints.setLabelText(Tr::tr("Synchronize Breakpoints"));
adjustBreakpointLocations.setDisplayName(Tr::tr("Adjust Breakpoint Locations")); adjustBreakpointLocations.setDisplayName(Tr::tr("Adjust Breakpoint Locations"));
adjustBreakpointLocations.setToolTip(Tr::tr("<p>Not all source code lines generate " adjustBreakpointLocations.setToolTip(
"<p>"
+ Tr::tr("<p>Not all source code lines generate "
"executable code. Putting a breakpoint on such a line acts as " "executable code. Putting a breakpoint on such a line acts as "
"if the breakpoint was set on the next line that generated code. " "if the breakpoint was set on the next line that generated code. "
"Selecting 'Adjust Breakpoint Locations' shifts the red " "Selecting 'Adjust Breakpoint Locations' shifts the red "
@@ -399,7 +408,9 @@ DebuggerSettings::DebuggerSettings()
useAnnotationsInMainEditor.setSettingsKey(debugModeGroup, "UseAnnotations"); useAnnotationsInMainEditor.setSettingsKey(debugModeGroup, "UseAnnotations");
useAnnotationsInMainEditor.setLabelText(Tr::tr("Use annotations in main editor when debugging")); useAnnotationsInMainEditor.setLabelText(Tr::tr("Use annotations in main editor when debugging"));
useAnnotationsInMainEditor.setToolTip(Tr::tr("<p>Shows simple variable values " useAnnotationsInMainEditor.setToolTip(
"<p>"
+ Tr::tr("Shows simple variable values "
"as annotations in the main editor during debugging.")); "as annotations in the main editor during debugging."));
useAnnotationsInMainEditor.setDefaultValue(true); useAnnotationsInMainEditor.setDefaultValue(true);
@@ -417,7 +428,9 @@ DebuggerSettings::DebuggerSettings()
useToolTipsInMainEditor.setSettingsKey(debugModeGroup, "UseToolTips"); useToolTipsInMainEditor.setSettingsKey(debugModeGroup, "UseToolTips");
useToolTipsInMainEditor.setLabelText(Tr::tr("Use tooltips in main editor when debugging")); useToolTipsInMainEditor.setLabelText(Tr::tr("Use tooltips in main editor when debugging"));
useToolTipsInMainEditor.setToolTip(Tr::tr("<p>Enables tooltips for variable " useToolTipsInMainEditor.setToolTip(
"<p>"
+ Tr::tr("Enables tooltips for variable "
"values during debugging. Since this can slow down debugging and " "values during debugging. Since this can slow down debugging and "
"does not provide reliable information as it does not use scope " "does not provide reliable information as it does not use scope "
"information, it is switched off by default.")); "information, it is switched off by default."));
@@ -425,17 +438,20 @@ DebuggerSettings::DebuggerSettings()
useToolTipsInLocalsView.setSettingsKey(debugModeGroup, "UseToolTipsInLocalsView"); useToolTipsInLocalsView.setSettingsKey(debugModeGroup, "UseToolTipsInLocalsView");
useToolTipsInLocalsView.setLabelText(Tr::tr("Use Tooltips in Locals View when Debugging")); useToolTipsInLocalsView.setLabelText(Tr::tr("Use Tooltips in Locals View when Debugging"));
useToolTipsInLocalsView.setToolTip(Tr::tr("<p>Enables tooltips in the locals " useToolTipsInLocalsView.setToolTip("<p>"
+ Tr::tr("Enables tooltips in the locals "
"view during debugging.")); "view during debugging."));
useToolTipsInBreakpointsView.setSettingsKey(debugModeGroup, "UseToolTipsInBreakpointsView"); useToolTipsInBreakpointsView.setSettingsKey(debugModeGroup, "UseToolTipsInBreakpointsView");
useToolTipsInBreakpointsView.setLabelText(Tr::tr("Use Tooltips in Breakpoints View when Debugging")); useToolTipsInBreakpointsView.setLabelText(Tr::tr("Use Tooltips in Breakpoints View when Debugging"));
useToolTipsInBreakpointsView.setToolTip(Tr::tr("<p>Enables tooltips in the breakpoints " useToolTipsInBreakpointsView.setToolTip("<p>"
+ Tr::tr("Enables tooltips in the breakpoints "
"view during debugging.")); "view during debugging."));
useToolTipsInStackView.setSettingsKey(debugModeGroup, "UseToolTipsInStackView"); useToolTipsInStackView.setSettingsKey(debugModeGroup, "UseToolTipsInStackView");
useToolTipsInStackView.setLabelText(Tr::tr("Use Tooltips in Stack View when Debugging")); useToolTipsInStackView.setLabelText(Tr::tr("Use Tooltips in Stack View when Debugging"));
useToolTipsInStackView.setToolTip(Tr::tr("<p>Enables tooltips in the stack " useToolTipsInStackView.setToolTip("<p>"
+ Tr::tr("Enables tooltips in the stack "
"view during debugging.")); "view during debugging."));
useToolTipsInStackView.setDefaultValue(true); useToolTipsInStackView.setDefaultValue(true);
@@ -498,7 +514,9 @@ DebuggerSettings::DebuggerSettings()
displayStringLimit.setRange(20, 10000); displayStringLimit.setRange(20, 10000);
displayStringLimit.setSingleStep(10); displayStringLimit.setSingleStep(10);
displayStringLimit.setLabelText(Tr::tr("Display string length:")); displayStringLimit.setLabelText(Tr::tr("Display string length:"));
displayStringLimit.setToolTip(Tr::tr("<p>The maximum length of string entries in the " displayStringLimit.setToolTip(
"<p>"
+ Tr::tr("The maximum length of string entries in the "
"Locals and Expressions views. Longer than that are cut off " "Locals and Expressions views. Longer than that are cut off "
"and displayed with an ellipsis attached.")); "and displayed with an ellipsis attached."));
@@ -508,7 +526,9 @@ DebuggerSettings::DebuggerSettings()
maximalStringLength.setRange(20, 10000000); maximalStringLength.setRange(20, 10000000);
maximalStringLength.setSingleStep(20); maximalStringLength.setSingleStep(20);
maximalStringLength.setLabelText(Tr::tr("Maximum string length:")); maximalStringLength.setLabelText(Tr::tr("Maximum string length:"));
maximalStringLength.setToolTip(Tr::tr("<p>The maximum length for strings in separated windows. " maximalStringLength.setToolTip(
"<p>"
+ Tr::tr("The maximum length for strings in separated windows. "
"Longer strings are cut off and displayed with an ellipsis attached.")); "Longer strings are cut off and displayed with an ellipsis attached."));
expandStack.setLabelText(Tr::tr("Reload Full Stack")); expandStack.setLabelText(Tr::tr("Reload Full Stack"));

View File

@@ -380,6 +380,10 @@ public:
void doShutdownEngine() void doShutdownEngine()
{ {
m_engine->setState(EngineShutdownRequested); m_engine->setState(EngineShutdownRequested);
if (m_engine->isDying()) {
m_engine->notifyEngineShutdownFinished();
return;
}
m_engine->startDying(); m_engine->startDying();
m_engine->showMessage("CALL: SHUTDOWN ENGINE"); m_engine->showMessage("CALL: SHUTDOWN ENGINE");
m_engine->shutdownEngine(); m_engine->shutdownEngine();

View File

@@ -114,6 +114,7 @@ struct TracepointCaptureData
}; };
const char tracepointCapturePropertyName[] = "GDB.TracepointCapture"; const char tracepointCapturePropertyName[] = "GDB.TracepointCapture";
const char notCompatibleMessage[] = "is not compatible with target architecture";
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
// //
@@ -346,7 +347,12 @@ void GdbEngine::handleResponse(const QString &buff)
// version and/or OS version used. // version and/or OS version used.
if (data.startsWith("warning:")) { if (data.startsWith("warning:")) {
showMessage(data.mid(9), AppStuff); // Cut "warning: " showMessage(data.mid(9), AppStuff); // Cut "warning: "
if (data.contains("is not compatible with target architecture")) if (data.contains(notCompatibleMessage))
m_ignoreNextTrap = true;
} else if (data.startsWith("Error while mapping")) {
m_detectTargetIncompat = true;
} else if (m_detectTargetIncompat && data.contains(notCompatibleMessage)) {
m_detectTargetIncompat = false;
m_ignoreNextTrap = true; m_ignoreNextTrap = true;
} }

View File

@@ -130,6 +130,7 @@ private: ////////// General Interface //////////
bool m_rerunPending = false; bool m_rerunPending = false;
bool m_ignoreNextTrap = false; bool m_ignoreNextTrap = false;
bool m_detectTargetIncompat = false;
////////// Gdb Output, State & Capability Handling ////////// ////////// Gdb Output, State & Capability Handling //////////

View File

@@ -276,6 +276,9 @@ void BuildSettingsWidget::cloneConfiguration()
if (name.isEmpty()) if (name.isEmpty())
return; return;
// Save the current build configuration settings, so that the clone gets all the settings
m_target->project()->saveSettings();
BuildConfiguration *bc = BuildConfigurationFactory::clone(m_target, m_buildConfiguration); BuildConfiguration *bc = BuildConfigurationFactory::clone(m_target, m_buildConfiguration);
if (!bc) if (!bc)
return; return;

View File

@@ -283,7 +283,7 @@ void QnxConfiguration::createKit(const Target &target, const QnxToolChainMap &to
.arg(displayName()) .arg(displayName())
.arg(target.shortDescription())); .arg(target.shortDescription()));
k->setAutoDetected(true); k->setAutoDetected(false);
k->setAutoDetectionSource(envFile().toString()); k->setAutoDetectionSource(envFile().toString());
k->setMutable(DeviceKitAspect::id(), true); k->setMutable(DeviceKitAspect::id(), true);

View File

@@ -29,7 +29,6 @@ QnxConfigurationManager::QnxConfigurationManager()
{ {
m_instance = this; m_instance = this;
m_writer = new PersistentSettingsWriter(qnxConfigSettingsFileName(), "QnxConfigurations"); m_writer = new PersistentSettingsWriter(qnxConfigSettingsFileName(), "QnxConfigurations");
restoreConfigurations();
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested, connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
this, &QnxConfigurationManager::saveConfigs); this, &QnxConfigurationManager::saveConfigs);
} }

View File

@@ -19,6 +19,8 @@ public:
QnxConfigurationManager(); QnxConfigurationManager();
~QnxConfigurationManager() override; ~QnxConfigurationManager() override;
void restoreConfigurations();
static QnxConfigurationManager *instance(); static QnxConfigurationManager *instance();
QList<QnxConfiguration*> configurations() const; QList<QnxConfiguration*> configurations() const;
void removeConfiguration(QnxConfiguration *config); void removeConfiguration(QnxConfiguration *config);
@@ -34,7 +36,6 @@ signals:
private: private:
QList<QnxConfiguration*> m_configurations; QList<QnxConfiguration*> m_configurations;
Utils::PersistentSettingsWriter *m_writer; Utils::PersistentSettingsWriter *m_writer;
void restoreConfigurations();
}; };
} // Qnx::Internal } // Qnx::Internal

View File

@@ -21,6 +21,7 @@
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
#include <projectexplorer/devicesupport/devicecheckbuildstep.h> #include <projectexplorer/devicesupport/devicecheckbuildstep.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/deployconfiguration.h> #include <projectexplorer/deployconfiguration.h>
#include <projectexplorer/kitinformation.h> #include <projectexplorer/kitinformation.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
@@ -90,7 +91,7 @@ public:
QAction *m_debugSeparator = nullptr; QAction *m_debugSeparator = nullptr;
QAction m_attachToQnxApplication{Tr::tr("Attach to remote QNX application..."), nullptr}; QAction m_attachToQnxApplication{Tr::tr("Attach to remote QNX application..."), nullptr};
QnxConfigurationManager configurationFactory; QnxConfigurationManager configurationManager;
QnxQtVersionFactory qtVersionFactory; QnxQtVersionFactory qtVersionFactory;
QnxDeviceFactory deviceFactory; QnxDeviceFactory deviceFactory;
QnxDeployConfigurationFactory deployConfigFactory; QnxDeployConfigurationFactory deployConfigFactory;
@@ -122,6 +123,10 @@ private:
void QnxPlugin::extensionsInitialized() void QnxPlugin::extensionsInitialized()
{ {
// Can't do yet as not all devices are around.
connect(DeviceManager::instance(), &DeviceManager::devicesLoaded,
&d->configurationManager, &QnxConfigurationManager::restoreConfigurations);
// Attach support // Attach support
connect(&d->m_attachToQnxApplication, &QAction::triggered, this, &showAttachToProcessDialog); connect(&d->m_attachToQnxApplication, &QAction::triggered, this, &showAttachToProcessDialog);

View File

@@ -852,14 +852,6 @@ static bool canLinkWithQt(QString *toolTip)
tip << Tr::tr("%1's resource directory is not writable.") tip << Tr::tr("%1's resource directory is not writable.")
.arg(Core::Constants::IDE_DISPLAY_NAME); .arg(Core::Constants::IDE_DISPLAY_NAME);
} }
// guard against redirecting Qt Creator that is part of a Qt installations
// TODO this fails for pre-releases in the online installer
// TODO this will fail when make Qt Creator non-required in the Qt installers
if (installSettingsExist && !installSettingsValue) {
canLink = false;
tip << Tr::tr("%1 is part of a Qt installation.")
.arg(Core::Constants::IDE_DISPLAY_NAME);
}
const FilePath link = installSettingsValue ? *installSettingsValue : FilePath(); const FilePath link = installSettingsValue ? *installSettingsValue : FilePath();
if (!link.isEmpty()) if (!link.isEmpty())
tip << Tr::tr("%1 is currently linked to \"%2\".") tip << Tr::tr("%1 is currently linked to \"%2\".")

View File

@@ -309,6 +309,7 @@ void SubmitEditorWidget::wrapDescription()
e.setVisible(false); e.setVisible(false);
e.setMinimumWidth(1000); e.setMinimumWidth(1000);
e.setFontPointSize(1.0); e.setFontPointSize(1.0);
e.setFontFamily({}); // QTBUG-111466
e.setLineWrapColumnOrWidth(d->description->lineWrapColumnOrWidth()); e.setLineWrapColumnOrWidth(d->description->lineWrapColumnOrWidth());
e.setLineWrapMode(d->description->lineWrapMode()); e.setLineWrapMode(d->description->lineWrapMode());
e.setWordWrapMode(d->description->wordWrapMode()); e.setWordWrapMode(d->description->wordWrapMode());

View File

@@ -3473,18 +3473,22 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QPointer") QTest::newRow("QPointer")
<< Data("#include <QPointer>\n" << Data("#include <QPointer>\n"
"#include <QTimer>\n", "#include <QTimer>\n"
"struct MyClass : public QObject { int val = 44; };\n",
"QTimer timer;\n" "QTimer timer;\n"
"QPointer<QTimer> ptr0;\n" "QPointer<QTimer> ptr0;\n"
"QPointer<QTimer> ptr1(&timer);", "QPointer<QTimer> ptr1(&timer);"
"QPointer<MyClass> ptr2(new MyClass());",
"&timer, &ptr0, &ptr1") "&timer, &ptr0, &ptr1, &ptr2")
+ CoreProfile() + CoreProfile()
+ Check("ptr0", "(null)", "@QPointer<@QTimer>") + Check("ptr0", "(null)", "@QPointer<@QTimer>")
+ Check("ptr1", "", "@QPointer<@QTimer>"); + Check("ptr1", "", "@QPointer<@QTimer>")
+ Check("ptr2.data", "", "MyClass") % NoLldbEngine
+ Check("ptr2.data.val", "44", "int") % NoLldbEngine;
QTest::newRow("QScopedPointer") QTest::newRow("QScopedPointer")
@@ -7912,7 +7916,7 @@ void tst_Dumpers::dumper_data()
+ QmlPrivateProfile() + QmlPrivateProfile()
+ QtVersion(0x50000) + QtVersion(0x50000)
+ Check("q2", FloatValue("2.5"), "@QV4::Value (double)") + Check("q2", FloatValue("2.5"), "@QV4::Value (double)") % QtVersion(0, 0x604ff)
//+ Check("v10", "(null)", "@QJSValue (null)") # Works in GUI. Why? //+ Check("v10", "(null)", "@QJSValue (null)") # Works in GUI. Why?
+ Check("v11", "true", "@QJSValue (bool)") + Check("v11", "true", "@QJSValue (bool)")
+ Check("v12", "1", "@QJSValue (int)") + Check("v12", "1", "@QJSValue (int)")
@@ -8117,17 +8121,6 @@ void tst_Dumpers::dumper_data()
+ Check("str", "first, second, third", "QtcDumperTest_String"); + Check("str", "first, second, third", "QtcDumperTest_String");
QTest::newRow("UndefinedStaticMembers")
<< Data("struct Foo { int a = 15; static int b; }; \n",
"Foo f;",
"&f")
+ Check("f.a", "15", "int")
+ Check("f.b", "<optimized out>", "") % GdbEngine
+ Check("f.b", "", "<Value unavailable error>") % CdbEngine;
QTest::newRow("LongDouble") QTest::newRow("LongDouble")
<< Data("", << Data("",

View File

@@ -68,7 +68,9 @@
<value type="QString" key="Debugger.Information">{1b25f20a-d584-4fb7-85b3-74dd15b82f6f}</value> <value type="QString" key="Debugger.Information">{1b25f20a-d584-4fb7-85b3-74dd15b82f6f}</value>
<value type="QString" key="PE.Profile.Device">Desktop Device</value> <value type="QString" key="PE.Profile.Device">Desktop Device</value>
<value type="QByteArray" key="PE.Profile.DeviceType">Desktop</value> <value type="QByteArray" key="PE.Profile.DeviceType">Desktop</value>
<valuelist type="QVariantList" key="PE.Profile.Environment"/> <valuelist type="QVariantList" key="PE.Profile.Environment">
<value type="QString">SQUISH_ENV_MODIFICATION</value>
</valuelist>
<value type="QString" key="PE.Profile.SysRoot"></value> <value type="QString" key="PE.Profile.SysRoot"></value>
<valuemap type="QVariantMap" key="PE.Profile.ToolChainsV3"> <valuemap type="QVariantMap" key="PE.Profile.ToolChainsV3">
<value type="QByteArray" key="C">{c96cfaf3-fb8a-472b-b3c7-e94e8c490f17}</value> <value type="QByteArray" key="C">{c96cfaf3-fb8a-472b-b3c7-e94e8c490f17}</value>

View File

@@ -44,7 +44,7 @@
<valuelist type="QVariantList"> <valuelist type="QVariantList">
<value type="QString">PATH</value> <value type="QString">PATH</value>
<value type="int">0</value> <value type="int">0</value>
<value type="QString">SQUISH_MSVC2017_PATH</value> <value type="QString">SQUISH_MSVC2017_64_PATH</value>
</valuelist> </valuelist>
</valuelist> </valuelist>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2017 (amd64)</value> <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2017 (amd64)</value>
@@ -59,6 +59,13 @@
<value type="QString" key="ProjectExplorer.MsvcToolChain.SupportedAbi">x86-windows-msvc2015-pe-32bit</value> <value type="QString" key="ProjectExplorer.MsvcToolChain.SupportedAbi">x86-windows-msvc2015-pe-32bit</value>
<value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBat">C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat</value> <value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBat">C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat</value>
<value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBatArg">x86</value> <value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBatArg">x86</value>
<valuelist type="QVariantList" key="ProjectExplorer.MsvcToolChain.environmentModifications">
<valuelist type="QVariantList">
<value type="QString">PATH</value>
<value type="int">0</value>
<value type="QString">SQUISH_MSVC2017_32_PATH</value>
</valuelist>
</valuelist>
<value type="bool" key="ProjectExplorer.ToolChain.Autodetect">true</value> <value type="bool" key="ProjectExplorer.ToolChain.Autodetect">true</value>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">Microsoft Visual C++ Compiler 14.0 (x86)</value> <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">Microsoft Visual C++ Compiler 14.0 (x86)</value>
<value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Msvc:{c96cfaf3-fb8a-472b-b3c7-e94e8c490f17}</value> <value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Msvc:{c96cfaf3-fb8a-472b-b3c7-e94e8c490f17}</value>
@@ -72,6 +79,13 @@
<value type="QString" key="ProjectExplorer.MsvcToolChain.SupportedAbi">x86-windows-msvc2015-pe-32bit</value> <value type="QString" key="ProjectExplorer.MsvcToolChain.SupportedAbi">x86-windows-msvc2015-pe-32bit</value>
<value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBat">C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat</value> <value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBat">C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat</value>
<value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBatArg">x86</value> <value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBatArg">x86</value>
<valuelist type="QVariantList" key="ProjectExplorer.MsvcToolChain.environmentModifications">
<valuelist type="QVariantList">
<value type="QString">PATH</value>
<value type="int">0</value>
<value type="QString">SQUISH_MSVC2017_32_PATH</value>
</valuelist>
</valuelist>
<value type="bool" key="ProjectExplorer.ToolChain.Autodetect">true</value> <value type="bool" key="ProjectExplorer.ToolChain.Autodetect">true</value>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">Microsoft Visual C++ Compiler 14.0 (x86)</value> <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">Microsoft Visual C++ Compiler 14.0 (x86)</value>
<value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Msvc:{ed856706-2a9d-4745-9d85-4e322b6f91d4}</value> <value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Msvc:{ed856706-2a9d-4745-9d85-4e322b6f91d4}</value>
@@ -89,7 +103,7 @@
<valuelist type="QVariantList"> <valuelist type="QVariantList">
<value type="QString">PATH</value> <value type="QString">PATH</value>
<value type="int">0</value> <value type="int">0</value>
<value type="QString">SQUISH_MSVC2017_PATH</value> <value type="QString">SQUISH_MSVC2017_64_PATH</value>
</valuelist> </valuelist>
</valuelist> </valuelist>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2017 (amd64)</value> <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2017 (amd64)</value>
@@ -108,7 +122,7 @@
<valuelist type="QVariantList"> <valuelist type="QVariantList">
<value type="QString">PATH</value> <value type="QString">PATH</value>
<value type="int">0</value> <value type="int">0</value>
<value type="QString">SQUISH_MSVC2019_PATH</value> <value type="QString">SQUISH_MSVC2019_64_PATH</value>
</valuelist> </valuelist>
</valuelist> </valuelist>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2019 (amd64)</value> <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2019 (amd64)</value>
@@ -127,7 +141,7 @@
<valuelist type="QVariantList"> <valuelist type="QVariantList">
<value type="QString">PATH</value> <value type="QString">PATH</value>
<value type="int">0</value> <value type="int">0</value>
<value type="QString">SQUISH_MSVC2019_PATH</value> <value type="QString">SQUISH_MSVC2019_64_PATH</value>
</valuelist> </valuelist>
</valuelist> </valuelist>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2019 (amd64)</value> <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">MSVC2019 (amd64)</value>

View File

@@ -237,18 +237,20 @@ def substituteCdb(settingsDir):
test.log("Injected architecture '%s' and bitness '%s' in cdb path..." % (architecture, bitness)) test.log("Injected architecture '%s' and bitness '%s' in cdb path..." % (architecture, bitness))
def substituteMsvcPaths(settingsDir, version): def substituteMsvcPaths(settingsDir, version, targetBitness=64):
if not version in ['2017', '2019']: if not version in ['2017', '2019']:
test.fatal('Unexpected MSVC version - "%s" not implemented yet.' % version) test.fatal('Unexpected MSVC version - "%s" not implemented yet.' % version)
return return
hostArch = "Hostx64" if targetBitness == 64 else "Hostx86"
targetArch = "x64" if targetBitness == 64 else "x86"
for msvcFlavor in ["Community", "BuildTools"]: for msvcFlavor in ["Community", "BuildTools"]:
try: try:
msvcPath = os.path.join("C:\\Program Files (x86)", "Microsoft Visual Studio", msvcPath = os.path.join("C:\\Program Files (x86)", "Microsoft Visual Studio",
version, msvcFlavor, "VC", "Tools", "MSVC") version, msvcFlavor, "VC", "Tools", "MSVC")
msvcPath = os.path.join(msvcPath, os.listdir(msvcPath)[0], "bin", "HostX64", "x64") msvcPath = os.path.join(msvcPath, os.listdir(msvcPath)[0], "bin", hostArch, targetArch)
__substitute__(os.path.join(settingsDir, "QtProject", 'qtcreator', 'toolchains.xml'), __substitute__(os.path.join(settingsDir, "QtProject", 'qtcreator', 'toolchains.xml'),
"SQUISH_MSVC%s_PATH" % version, msvcPath) "SQUISH_MSVC%s_%d_PATH" % (version, targetBitness), msvcPath)
return return
except: except:
continue continue
@@ -256,6 +258,26 @@ def substituteMsvcPaths(settingsDir, version):
"Please make sure that MSVC%s is installed correctly." % version) "Please make sure that MSVC%s is installed correctly." % version)
def prependWindowsKit(settingsDir, targetBitness=64):
targetArch = "x64" if targetBitness == 64 else "x86"
profilesPath = os.path.join(settingsDir, 'QtProject', 'qtcreator', 'profiles.xml')
winkits = os.path.join("C:\\Program Files (x86)", "Windows Kits", "10")
if not os.path.exists(winkits):
__substitute__(profilesPath, "SQUISH_ENV_MODIFICATION", "")
return
possibleVersions = os.listdir(os.path.join(winkits, 'bin'))
possibleVersions.reverse() # prefer higher versions
for version in possibleVersions:
if not version.startswith("10"):
continue
toolsPath = os.path.join(winkits, 'bin', version, targetArch)
if os.path.exists(os.path.join(toolsPath, 'rc.exe')):
__substitute__(profilesPath, "SQUISH_ENV_MODIFICATION", "PATH=+%s" % toolsPath)
return
test.warning("Windows Kit path could not be added, some tests mail fail.")
__substitute__(profilesPath, "SQUISH_ENV_MODIFICATION", "")
def __guessABI__(supportedABIs, use64Bit): def __guessABI__(supportedABIs, use64Bit):
if platform.system() == 'Linux': if platform.system() == 'Linux':
supportedABIs = filter(lambda x: 'linux' in x, supportedABIs) supportedABIs = filter(lambda x: 'linux' in x, supportedABIs)
@@ -350,8 +372,10 @@ def copySettingsToTmpDir(destination=None, omitFiles=[]):
substituteDefaultCompiler(tmpSettingsDir) substituteDefaultCompiler(tmpSettingsDir)
elif platform.system() in ('Windows', 'Microsoft'): elif platform.system() in ('Windows', 'Microsoft'):
substituteCdb(tmpSettingsDir) substituteCdb(tmpSettingsDir)
substituteMsvcPaths(tmpSettingsDir, '2017') substituteMsvcPaths(tmpSettingsDir, '2017', 64)
substituteMsvcPaths(tmpSettingsDir, '2019') substituteMsvcPaths(tmpSettingsDir, '2017', 32)
substituteMsvcPaths(tmpSettingsDir, '2019', 64)
prependWindowsKit(tmpSettingsDir, 32)
substituteOnlineInstallerPath(tmpSettingsDir) substituteOnlineInstallerPath(tmpSettingsDir)
substituteUnchosenTargetABIs(tmpSettingsDir) substituteUnchosenTargetABIs(tmpSettingsDir)
SettingsPath = ['-settingspath', '"%s"' % tmpSettingsDir] SettingsPath = ['-settingspath', '"%s"' % tmpSettingsDir]