diff --git a/cmake/QtCreatorDocumentation.cmake b/cmake/QtCreatorDocumentation.cmake index 3c66ae0947b..8fa0c58d93e 100644 --- a/cmake/QtCreatorDocumentation.cmake +++ b/cmake/QtCreatorDocumentation.cmake @@ -43,23 +43,6 @@ function(qt5_query_qmake) endforeach() 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) # Set up important targets: 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" "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}) list(APPEND _qdoc_index_args "-indexdir;${_index}") endforeach() @@ -90,9 +78,9 @@ function(_setup_qdoc_targets _qdocconf_file _retval) list(APPEND _env "${_export}=${${_export}}") endforeach() - set(_full_qdoc_command "${_qdoc}") + get_target_property(_full_qdoc_command Qt::qdoc IMPORTED_LOCATION) 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() if (_arg_HTML_DIR STREQUAL "") @@ -182,12 +170,6 @@ endfunction() function(qdoc_build_qdocconf_file _qdocconf_file) _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" "INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS" ${ARGN}) if (_arg_UNPARSED_ARGUMENTS) @@ -206,7 +188,7 @@ function(qdoc_build_qdocconf_file _qdocconf_file) FRAMEWORK_PATHS ${_arg_FRAMEWORK_PATHS} ) - if (_arg_QCH) + if (_arg_QCH AND _html_outputdir) _setup_qhelpgenerator_targets("${_qdocconf_file}" "${_html_outputdir}" QCH_DIR "${_arg_QCH_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}") endif() diff --git a/dist/changelog/changes-10.0.0.md b/dist/changelog/changes-10.0.0.md index db90fc30e59..53bcd7e1623 100644 --- a/dist/changelog/changes-10.0.0.md +++ b/dist/changelog/changes-10.0.0.md @@ -29,6 +29,7 @@ Editing ### C++ +* Updated LLVM to version 16.0.0 * Added renaming of includes when renaming `.ui` files (QTCREATORBUG-14259) * Added automatic refactoring of C++ code when forms in `.ui` files are renamed (QTCREATORBUG-1179) @@ -78,6 +79,7 @@ Editing Projects -------- +* Moved the preference page for `Devices` to below `Kits` * Added `Build > Run Generator` for exporting projects to other build systems (QTCREATORBUG-28149) * 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 ([cmake-format Documentation](https://cmake-format.readthedocs.io/en/latest/)) * 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 * Changed the environment for running CMake to be based on the build environment by default (QTCREATORBUG-28513) @@ -121,6 +125,15 @@ Debugging (QTCREATORBUG-25865) * Fixed highlighting in the `Disassembler` view * 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 -------- @@ -165,11 +178,7 @@ Platforms ### Android * Removed service management from the manifest editor (QTCREATORBUG-28024) - -### Remote Linux - -* Fixed that opening a file dialog unnecessarily asks for passwords for - remote devices +* Fixed `Open package location after build` (QTCREATORBUG-28791) ### Docker diff --git a/dist/changelog/changes-9.0.2.md b/dist/changelog/changes-9.0.2.md new file mode 100644 index 00000000000..70b50534dea --- /dev/null +++ b/dist/changelog/changes-9.0.2.md @@ -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 diff --git a/dist/installer/mac/entitlements.plist b/dist/installer/mac/entitlements.plist index 4bf9fbeb0a4..8500f2f703f 100644 --- a/dist/installer/mac/entitlements.plist +++ b/dist/installer/mac/entitlements.plist @@ -12,5 +12,8 @@ com.apple.security.automation.apple-events + + com.apple.security.cs.allow-dyld-environment-variables + diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-build-systems.qdocinc b/doc/qtcreator/src/projects/creator-only/creator-projects-build-systems.qdocinc index a12e010d68e..b3300865dd6 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-build-systems.qdocinc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-build-systems.qdocinc @@ -35,6 +35,16 @@ the commands in the low-level build graph (like make does). For more 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 for building and running projects, select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Build & Run} > \uicontrol General. diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc index 91ffcfe81d5..1ab5ef2fab5 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc @@ -72,6 +72,19 @@ For more information about debugging Qt Quick projects, see \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 \QC executes external processes to accomplish tasks such as building diff --git a/doc/qtcreatordev/examples/exampleplugin/CMakeLists.txt b/doc/qtcreatordev/examples/exampleplugin/CMakeLists.txt index 69df3ec4da7..65fba000893 100644 --- a/doc/qtcreatordev/examples/exampleplugin/CMakeLists.txt +++ b/doc/qtcreatordev/examples/exampleplugin/CMakeLists.txt @@ -20,6 +20,24 @@ find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED) set(QtX Qt${QT_VERSION_MAJOR}) #! [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] add_qtc_plugin(Example PLUGIN_DEPENDS @@ -36,5 +54,16 @@ add_qtc_plugin(Example example.h example_global.h exampleconstants.h + examplefunctions.h ) #! [4] + +#! [6] +# conditionally add auto tests +if(WITH_TESTS) + add_qtc_test(tst_mytest + SOURCES tst_mytest.cpp + DEPENDS Example + ) +endif() +#! [6] diff --git a/doc/qtcreatordev/examples/exampleplugin/example.cpp b/doc/qtcreatordev/examples/exampleplugin/example.cpp index f001fad5119..3dd54659f0b 100644 --- a/doc/qtcreatordev/examples/exampleplugin/example.cpp +++ b/doc/qtcreatordev/examples/exampleplugin/example.cpp @@ -1,5 +1,7 @@ #include "example.h" + #include "exampleconstants.h" +#include "examplefunctions.h" #include #include @@ -13,9 +15,31 @@ #include #include +//! [test include] +#ifdef WITH_TESTS +#include +#endif +//! [test include] + namespace Example { 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() { // Create your members @@ -53,6 +77,11 @@ bool ExamplePlugin::initialize(const QStringList &arguments, QString *errorStrin Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu); //! [add menu] +//! [register tests] +#ifdef WITH_TESTS + addTest(); +#endif + //! [register tests] return true; } @@ -81,4 +110,18 @@ void ExamplePlugin::triggerAction() //! [slot implementation] } // namespace Internal + +//! [exported function] +int addOne(int i) +{ + return i; // that is wrong! +} +//! [exported function] + } // namespace Example + +//! [include moc] +#ifdef WITH_TESTS +#include "example.moc" +#endif +//! [include moc] diff --git a/doc/qtcreatordev/examples/exampleplugin/example.h b/doc/qtcreatordev/examples/exampleplugin/example.h index e858e92180d..dfde7849a12 100644 --- a/doc/qtcreatordev/examples/exampleplugin/example.h +++ b/doc/qtcreatordev/examples/exampleplugin/example.h @@ -1,7 +1,5 @@ #pragma once -#include "example_global.h" - #include //! [namespaces] diff --git a/doc/qtcreatordev/examples/exampleplugin/example_global.h b/doc/qtcreatordev/examples/exampleplugin/example_global.h index 0ea029c5c73..f051e16dd9f 100644 --- a/doc/qtcreatordev/examples/exampleplugin/example_global.h +++ b/doc/qtcreatordev/examples/exampleplugin/example_global.h @@ -3,6 +3,8 @@ #pragma once +#include + #if defined(EXAMPLE_LIBRARY) # define EXAMPLE_EXPORT Q_DECL_EXPORT #else diff --git a/doc/qtcreatordev/examples/exampleplugin/examplefunctions.h b/doc/qtcreatordev/examples/exampleplugin/examplefunctions.h new file mode 100644 index 00000000000..7a618cbe578 --- /dev/null +++ b/doc/qtcreatordev/examples/exampleplugin/examplefunctions.h @@ -0,0 +1,9 @@ +#pragma once + +#include "example_global.h" + +namespace Example { + +int EXAMPLE_EXPORT addOne(int i); + +} // namespace Example diff --git a/doc/qtcreatordev/examples/exampleplugin/tst_mytest.cpp b/doc/qtcreatordev/examples/exampleplugin/tst_mytest.cpp new file mode 100644 index 00000000000..12cf7b1e315 --- /dev/null +++ b/doc/qtcreatordev/examples/exampleplugin/tst_mytest.cpp @@ -0,0 +1,21 @@ +#include "examplefunctions.h" + +#include + +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" diff --git a/doc/qtcreatordev/src/creating-plugins.qdoc b/doc/qtcreatordev/src/creating-plugins.qdoc index ef9ce82959b..6a83c6d9bf4 100644 --- a/doc/qtcreatordev/src/creating-plugins.qdoc +++ b/doc/qtcreatordev/src/creating-plugins.qdoc @@ -38,6 +38,12 @@ \li \l{Distributing Plugins} \endlist + \section1 Topics + + \list + \li \l{Adding Tests} + \endlist + \section1 Design Principles \list diff --git a/doc/qtcreatordev/src/plugin-tests.qdoc b/doc/qtcreatordev/src/plugin-tests.qdoc new file mode 100644 index 00000000000..78d9c6c4b6e --- /dev/null +++ b/doc/qtcreatordev/src/plugin-tests.qdoc @@ -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 } + 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 +*/ diff --git a/share/qtcreator/debugger/cdbbridge.py b/share/qtcreator/debugger/cdbbridge.py index 8b0d323aa56..8e5241e934a 100644 --- a/share/qtcreator/debugger/cdbbridge.py +++ b/share/qtcreator/debugger/cdbbridge.py @@ -298,16 +298,16 @@ class Dumper(DumperBase): coreModuleName = self.qtCoreModuleName() if coreModuleName is not None: qstrdupSymbolName = '%s!%s' % (coreModuleName, qstrdupSymbolName) - resolved = cdbext.resolveSymbol(qstrdupSymbolName) - if resolved: - name = resolved[0].split('!')[1] - namespaceIndex = name.find('::') - if namespaceIndex > 0: - namespace = name[:namespaceIndex + 2] + resolved = cdbext.resolveSymbol(qstrdupSymbolName) + if resolved: + name = resolved[0].split('!')[1] + namespaceIndex = name.find('::') + if namespaceIndex > 0: + namespace = name[:namespaceIndex + 2] + self.qtCustomEventFunc = self.parseAndEvaluate( + '%s!%sQObject::customEvent' % + (self.qtCoreModuleName(), namespace)).address() self.qtNamespace = lambda: namespace - self.qtCustomEventFunc = self.parseAndEvaluate( - '%s!%sQObject::customEvent' % - (self.qtCoreModuleName(), namespace)).address() return namespace def qtVersion(self): diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 1fe048ea984..47b0076cf40 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -167,6 +167,7 @@ class DumperBase(): self.isGdb = False self.isLldb = False self.isCli = False + self.isDebugBuild = None # Later set, or not set: self.stringCutOff = 10000 diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 031addb8530..2cdf900d78e 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -2123,7 +2123,7 @@ def qdumpHelper__QVariant6(d, value): d.split('HHIIIpp', metaTypeInterface) # Well-known simple type. - if variantType <= 6: + if variantType >= 1 and variantType <= 6: qdumpHelper_QVariants_A[variantType](d, value) return None @@ -2854,43 +2854,82 @@ def qdump_32__QJSValue(d, value): def qdump_64__QJSValue_6(d, value): dd = value.split('Q')[0] - typ = dd >> 47 - if dd == 0: d.putValue('(undefined)') d.putType(value.type.name + ' (undefined)') - elif typ == 5: - d.putValue('(null)') - d.putType(value.type.name + ' (null)') - elif typ == 6: - d.putValue('true' if dd & 1 else 'false') - d.putType(value.type.name + ' (bool)') - elif typ == 7: - d.putValue(dd & 0xfffffffff) - d.putType(value.type.name + ' (int)') - elif typ > 7: - val = d.Value(d) - val.ldata = struct.pack('q', dd ^ 0xfffc000000000000) - val._type = d.createType('double') - d.putItem(val) - d.putType(value.type.name + ' (double)') - elif typ <= 3: # Heap - if dd & 1: # String + if d.qtVersion() < 0x60500: + typ = dd >> 47 + if typ == 5: + d.putValue('(null)') + d.putType(value.type.name + ' (null)') + elif typ == 6: + d.putValue('true' if dd & 1 else 'false') + d.putType(value.type.name + ' (bool)') + elif typ == 7: + d.putValue(dd & 0xfffffffff) + d.putType(value.type.name + ' (int)') + elif typ > 7: val = d.Value(d) - val.ldata = struct.pack('q', dd & ~1) - val._type = d.createType('@QString*') + val.ldata = struct.pack('q', dd ^ 0xfffc000000000000) + val._type = d.createType('double') d.putItem(val) - d.putType(value.type.name + ' (QString)') + d.putType(value.type.name + ' (double)') + elif typ <= 3: # Heap + if dd & 1: # String + val = d.Value(d) + val.ldata = struct.pack('q', dd & ~1) + val._type = d.createType('@QString*') + d.putItem(val) + d.putType(value.type.name + ' (QString)') + else: + # FIXME: Arrays, Objects missing. + val = d.split('{@QV4::Managed*}', value)[0] + d.putItem(val) + d.putItemCount(1) else: - # FIXME: Arrays, Objects missing. - val = d.split('{@QV4::Managed*}', value)[0] - d.putItem(val) + d.putEmptyValue() d.putItemCount(1) + d.putPlainChildren(value) + return + else: - d.putEmptyValue() - d.putItemCount(1) - d.putPlainChildren(value) - return + 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(): with Children(d): diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index e376e29ef4d..622bec4e5c1 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -204,11 +204,17 @@ def qdump__std__list(d, value): def qdump__std__list__QNX(d, value): - try: - _ = value["_Mypair"]["_Myval2"]["_Myproxy"] + if d.isDebugBuild is None: + try: + _ = value["_Mypair"]["_Myval2"]["_Myproxy"] + d.isDebugBuild = True + except Exception: + d.isDebugBuild = False + if d.isDebugBuild: (proxy, head, size) = value.split("ppp") - except Exception: + else: (head, size) = value.split("pp") + d.putItemCount(size, 1000) if d.isExpanded(): @@ -271,10 +277,15 @@ def qdump__std__map(d, value): def qdump_std__map__helper(d, value): - try: - _ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"] + if d.isDebugBuild is None: + try: + _ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"] + d.isDebugBuild = True + except Exception: + d.isDebugBuild = False + if d.isDebugBuild: (proxy, head, size) = value.split("ppp") - except Exception: + else: (head, size) = value.split("pp") d.check(0 <= size and size <= 100 * 1000 * 1000) d.putItemCount(size) @@ -450,10 +461,15 @@ def qdump__std__set(d, value): def qdump__std__set__QNX(d, value): - try: - _ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"] + if d.isDebugBuild is None: + try: + _ = value["_Mypair"]["_Myval2"]["_Myval2"]["_Myproxy"] + d.isDebugBuild = True + except Exception: + d.isDebugBuild = False + if d.isDebugBuild: (proxy, head, size) = value.split("ppp") - except Exception: + else: (head, size) = value.split("pp") d.check(0 <= size and size <= 100 * 1000 * 1000) 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): - try: - _ = value["_Mypair"]["_Myval2"]["_Myproxy"] - (proxy, buffer, size, alloc) = value.split("p16spp") - except Exception: - proxy = None + if d.isDebugBuild is None: + try: + _ = value["_Mypair"]["_Myval2"]["_Myproxy"] + d.isDebugBuild = True + except Exception: + d.isDebugBuild = False + if d.isDebugBuild: + (_, buffer, size, alloc) = value.split("p16spp") + else: (buffer, size, alloc) = value.split("16spp") d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) _BUF_SIZE = int(16 / charType.size()) if _BUF_SIZE <= alloc: - if proxy is None: - data = value.extractPointer() - else: + if d.isDebugBuild: (proxy, data) = value.split("pp") - else: - if proxy is None: - data = value.address() else: + data = value.extractPointer() + else: + if d.isDebugBuild: data = value.address() + d.ptrSize() + else: + data = value.address() d.putCharArrayHelper(data, size, charType, format) @@ -656,10 +676,15 @@ def qdump__std__unordered_map(d, value): if d.isMsvcTarget(): _list = value["_List"] - try: - _ = _list["_Mypair"]["_Myval2"]["_Myproxy"] + if d.isDebugBuild is None: + try: + _ = _list["_Mypair"]["_Myval2"]["_Myproxy"] + d.isDebugBuild = True + except Exception: + d.isDebugBuild = False + if d.isDebugBuild: (_, start, size) = _list.split("ppp") - except Exception: + else: (start, size) = _list.split("pp") else: try: @@ -894,18 +919,28 @@ def qdumpHelper__std__vector__libcxx(d, value): def qdumpHelper__std__vector__msvc(d, value): inner_type = value.type[0] if inner_type.name == "bool": - try: - _ = value["_Myproxy"] + if d.isDebugBuild is None: + try: + _ = value["_Myproxy"] + d.isDebugBuild = True + except RuntimeError: + d.isDebugBuild = False + if d.isDebugBuild: proxy1, proxy2, start, finish, alloc, size = value.split("pppppi") - except RuntimeError: + else: start, finish, alloc, size = value.split("pppi") d.check(0 <= size and size <= 1000 * 1000 * 1000) qdumpHelper__std__vector__bool(d, start, size, inner_type) else: - try: - _ = value["_Mypair"]["_Myval2"]["_Myproxy"] + if d.isDebugBuild is None: + try: + _ = value["_Mypair"]["_Myval2"]["_Myproxy"] + d.isDebugBuild = True + except RuntimeError: + d.isDebugBuild = False + if d.isDebugBuild: proxy, start, finish, alloc = value.split("pppp") - except RuntimeError: + else: start, finish, alloc = value.split("ppp") size = (finish - start) // inner_type.size() d.check(0 <= size and size <= 1000 * 1000 * 1000) diff --git a/share/qtcreator/translations/qtcreator_da.ts b/share/qtcreator/translations/qtcreator_da.ts index cd68dfd26b1..67e43c395b6 100644 --- a/share/qtcreator/translations/qtcreator_da.ts +++ b/share/qtcreator/translations/qtcreator_da.ts @@ -11302,8 +11302,8 @@ Påvirket brudpunkter er %1 Dereferencér pegere automatisk - <p>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. - <p>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. + 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. + 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. Show "std::" Namespace in Types @@ -11314,8 +11314,8 @@ Påvirket brudpunkter er %1 Vis "std::"-navnerum i typer - <p>Shows "std::" prefix for types from the standard library. - <p>Viser "std::"-præfiks for typer fra standardbiblioteket. + Shows "std::" prefix for types from the standard library. + Viser "std::"-præfiks for typer fra standardbiblioteket. Show Qt's Namespace in Types @@ -11326,16 +11326,16 @@ Påvirket brudpunkter er %1 Vis Qt's navnerum i typer - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". - <p>Viser Qt-navnerum-præfiks for Qt-typer. Dette er kun relevant hvis Qt blev konfigureret med "-qtnamespace". + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Viser Qt-navnerum-præfiks for Qt-typer. Dette er kun relevant hvis Qt blev konfigureret med "-qtnamespace". Show QObject names if available Vis QObject-navne, hvis tilgængelige - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. - <p>Viser objectName-egenskaben af QObject-baseret punkter. Bemærk at det kan påvirke fejlretter-ydelse negativt selv hvis der ikke er nogen QObjects. + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + Viser objectName-egenskaben af QObject-baseret punkter. Bemærk at det kan påvirke fejlretter-ydelse negativt selv hvis der ikke er nogen QObjects. Sort Members of Classes and Structs Alphabetically @@ -11354,12 +11354,12 @@ Påvirket brudpunkter er %1 Brug kodemodel - <p>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. - <p>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. + 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. + 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. - <p>Displays names of QThread based threads. - <p>Viser navne af QThread-baseret tråde. + Displays names of QThread based threads. + Viser navne af QThread-baseret tråde. Display thread names @@ -11374,8 +11374,8 @@ Påvirket brudpunkter er %1 Juster brudpunkt placeringer - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - <p>Ikke alle kildekodelinjer genererer eksekverbar kode. Sættes et brudpunkt på sådan en linje vil det virke som hvis brudpunktet blev sat på den næste linje der genererede kode. Valg af 'Juster brudpunkt placeringer' skifter de røde brudpunktsmarkører til placeringen af det ægte brudpunkt. + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + Ikke alle kildekodelinjer genererer eksekverbar kode. Sættes et brudpunkt på sådan en linje vil det virke som hvis brudpunktet blev sat på den næste linje der genererede kode. Valg af 'Juster brudpunkt placeringer' skifter de røde brudpunktsmarkører til placeringen af det ægte brudpunkt. Break on "throw" @@ -11466,12 +11466,12 @@ Påvirket brudpunkter er %1 Register til efter-død fejlretning - <p>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. - <p>Den maksimale længde af strenge-entiteter i Locals og expressions-ruden. Længere strenge afkortes og vises med udeladelsesprikker. + The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. + Den maksimale længde af strenge-entiteter i Locals og expressions-ruden. Længere strenge afkortes og vises med udeladelsesprikker. - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - <p>Den maksimale længde af strenge i separate vinduer. Længere strenge afkortes og vises med udeladelsesprikker. + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + Den maksimale længde af strenge i separate vinduer. Længere strenge afkortes og vises med udeladelsesprikker. Reload Full Stack diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 11d5737cbfb..a8dd99f934e 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -2556,8 +2556,8 @@ Trotzdem fortfahren? Zeiger automatisch dereferenzieren - <p>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. - <p>Weist den Debugger an, automatisch dereferenzierte Zeiger anzuzeigen. Dadurch ist die Baumansicht flacher, aber weniger detailreich. + 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. + Weist den Debugger an, automatisch dereferenzierte Zeiger anzuzeigen. Dadurch ist die Baumansicht flacher, aber weniger detailreich. Additional arguments: @@ -2584,8 +2584,8 @@ Trotzdem fortfahren? "std::"-Namensraum in Typnamen anzeigen - <p>Shows "std::" prefix for types from the standard library. - <p>Zeigt das "std::"-Präfix für Datentypen aus der Standardbibliothek an. + Shows "std::" prefix for types from the standard library. + Zeigt das "std::"-Präfix für Datentypen aus der Standardbibliothek an. Show Qt's Namespace in Types @@ -2596,16 +2596,16 @@ Trotzdem fortfahren? Qt-Namensraum in Typnamen anzeigen - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". - <p>Qt-Namensraum bei Datentypen aus Qt anzeigen. Das ist nur relevant, wenn Qt mit '-qtnamespace' konfiguriert wurde. + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Qt-Namensraum bei Datentypen aus Qt anzeigen. Das ist nur relevant, wenn Qt mit '-qtnamespace' konfiguriert wurde. Show QObject names if available Falls möglich QObject-Namen anzeigen - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. - <p>Zeigt die objectName-Eigenschaft von QObject basierten Elementen an. Dies kann die Debugger-Geschwindigkeit verschlechtern, selbst wenn keine QObjects benutzt werden. + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + Zeigt die objectName-Eigenschaft von QObject basierten Elementen an. Dies kann die Debugger-Geschwindigkeit verschlechtern, selbst wenn keine QObjects benutzt werden. Sort Members of Classes and Structs Alphabetically @@ -2624,24 +2624,24 @@ Trotzdem fortfahren? Codemodell verwenden - <p>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. - <p>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. + 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. + 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. - <p>Displays names of QThread based threads. - <p>Zeigt Namen der Threads an, die auf QThread basieren. + Displays names of QThread based threads. + Zeigt Namen der Threads an, die auf QThread basieren. Display thread names Namen von Threads anzeigen - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - <p>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 'Positionen der Haltepunkte korrigieren' bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird. + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + 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 'Positionen der Haltepunkte korrigieren' bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird. - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - <p>Die maximale Länge von Zeichenketten in separaten Fenstern. Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt. + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + Die maximale Länge von Zeichenketten in separaten Fenstern. Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt. Synchronize Breakpoints @@ -2700,8 +2700,8 @@ Trotzdem fortfahren? Rückwärts Debuggen aktivieren - <p>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. - <p>Die maximale Länge von Zeichenketten in "Lokale Variablen" und "Ausdrücke". Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt. + The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. + Die maximale Länge von Zeichenketten in "Lokale Variablen" und "Ausdrücke". Längere Ausdrücke werden abgeschnitten und mit Auslassungspunkten angezeigt. Reload Full Stack @@ -6044,8 +6044,8 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Annotationen im Haupt-Editor beim Debuggen benutzen - <p>Shows simple variable values as annotations in the main editor during debugging. - <p>Zeigt Werte von einfachen Variablen als Annotation im Haupt-Editor beim Debuggen. + Shows simple variable values as annotations in the main editor during debugging. + Zeigt Werte von einfachen Variablen als Annotation im Haupt-Editor beim Debuggen. Use pseudo message tracepoints @@ -6064,20 +6064,20 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl 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. - <p>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. - <p>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. + 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. + 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. - <p>Enables tooltips in the locals view during debugging. - <p>Aktiviert Tooltips für die Anzeige &quot;Lokale Variablen&quot; beim Debuggen. + Enables tooltips in the locals view during debugging. + Aktiviert Tooltips für die Anzeige &quot;Lokale Variablen&quot; beim Debuggen. - <p>Enables tooltips in the breakpoints view during debugging. - <p>Aktiviert Tooltips für die Anzeige &quot;Haltepunkte&quot; beim Debuggen. + Enables tooltips in the breakpoints view during debugging. + Aktiviert Tooltips für die Anzeige &quot;Haltepunkte&quot; beim Debuggen. - <p>Enables tooltips in the stack view during debugging. - <p>Aktiviert Tooltips für die Anzeige &quot;Stack&quot; beim Debuggen. + Enables tooltips in the stack view during debugging. + Aktiviert Tooltips für die Anzeige &quot;Stack&quot; beim Debuggen. Shows QML object tree in Locals and Expressions when connected and not stepping. diff --git a/share/qtcreator/translations/qtcreator_ja.ts b/share/qtcreator/translations/qtcreator_ja.ts index 2f55dfdb0d5..efdd53f0586 100644 --- a/share/qtcreator/translations/qtcreator_ja.ts +++ b/share/qtcreator/translations/qtcreator_ja.ts @@ -16000,8 +16000,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 自動的にポインタを逆参照する - <p>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. - <p>ローカル変数と式ビューでポインタを自動的に逆参照するかどうかを切り替えます。ツリービューの階層を減らすことができますが、表示されない中間レベルのデータが失われます。 + 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. + ローカル変数と式ビューでポインタを自動的に逆参照するかどうかを切り替えます。ツリービューの階層を減らすことができますが、表示されない中間レベルのデータが失われます。 Show "std::" Namespace in Types @@ -16012,8 +16012,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 型情報に "std::" 名前空間を表示する - <p>Shows "std::" prefix for types from the standard library. - <p>標準ライブラリ内の型には "std::" プレフィックスを表示します。 + Shows "std::" prefix for types from the standard library. + 標準ライブラリ内の型には "std::" プレフィックスを表示します。 Show Qt's Namespace in Types @@ -16024,16 +16024,16 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 型情報に Qt の名前空間を表示する - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". - <p>Qt の型には Qt の名前空間を表示します。Qt が '-qtnamespace' オプション付きで configure されている場合のみ有効です。 + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Qt の型には Qt の名前空間を表示します。Qt が '-qtnamespace' オプション付きで configure されている場合のみ有効です。 Show QObject names if available 可能であれば QObject の名前を表示する - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. - <p>QObject ベースのクラスでは objectName プロパティを表示します。注意: QObject クラスが使用されていない場合でもデバッガのパフォーマンスが悪化する可能性があります。 + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + QObject ベースのクラスでは objectName プロパティを表示します。注意: QObject クラスが使用されていない場合でもデバッガのパフォーマンスが悪化する可能性があります。 Sort Members of Classes and Structs Alphabetically @@ -16048,12 +16048,12 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 デバッグヘルパを使用する - <p>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. - <p>このオプションを有効にすると C++ コードモデルを用いて変数スコープ情報を取得します。これにより若干デバッグが速くなりますが、最適化されたコードでは失敗する事もあります。 + 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. + このオプションを有効にすると C++ コードモデルを用いて変数スコープ情報を取得します。これにより若干デバッグが速くなりますが、最適化されたコードでは失敗する事もあります。 - <p>Displays names of QThread based threads. - <p>QThread ベースのスレッド名を表示します。 + Displays names of QThread based threads. + QThread ベースのスレッド名を表示します。 Synchronize Breakpoints @@ -16064,8 +16064,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 ブレークポイントの位置を調節する - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - <p>ソースコードのすべての行に対して実行可能コードが生成されるわけではありません。その為、コードが生成されない行にブレークポイントを設定した場合、次の行にブレークポイントが設定されているかのように動作します。'ブレークポイントの位置を調節する' を有効にすると、そのような場合に実際のブレークポイントの位置に赤いブレークポイントのマーカーを設定します。 + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + ソースコードのすべての行に対して実行可能コードが生成されるわけではありません。その為、コードが生成されない行にブレークポイントを設定した場合、次の行にブレークポイントが設定されているかのように動作します。'ブレークポイントの位置を調節する' を有効にすると、そのような場合に実際のブレークポイントの位置に赤いブレークポイントのマーカーを設定します。 Break on "throw" @@ -16136,8 +16136,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 <p>デバッグ中、スタックビューでツールチップを有効にします。 - <p>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. - <p>ローカル変数と式ビューに表示する文字列の最大長です。この値よりも長い文字列は省略記号を付けて途中までを表示します。 + The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. + ローカル変数と式ビューに表示する文字列の最大長です。この値よりも長い文字列は省略記号を付けて途中までを表示します。 Show Address Data in Breakpoints View when Debugging @@ -16172,8 +16172,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 <p>ローカル変数と式ペインに表示する文字列の最大長です。この値よりも長い文字列は省略記号を付けて途中までを表示します。 - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - <p>別ウィンドウに表示する文字列の最大長です。この値よりも長い文字列は省略記号を付けて途中までを表示します。 + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + 別ウィンドウに表示する文字列の最大長です。この値よりも長い文字列は省略記号を付けて途中までを表示します。 Reload Full Stack @@ -16192,8 +16192,8 @@ Maintenance Tool で %2 を更新した場合は、Maintenance Tool を再実行 <p>デバッガを命令指向の操作モードに切り替えます。この操作モードにするとステップ操作は1命令毎に実行され、ソース位置ビューでは逆アセンブル結果を表示します。 - <p>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. - <p>ローカル変数と式ビューでポインタを自動的に逆参照するかどうかを切り替えます。ツリービューの階層を減らすことができますが、表示されない中間レベルのデータが失われます。 + 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. + ローカル変数と式ビューでポインタを自動的に逆参照するかどうかを切り替えます。ツリービューの階層を減らすことができますが、表示されない中間レベルのデータが失われます。 Display thread names diff --git a/share/qtcreator/translations/qtcreator_pl.ts b/share/qtcreator/translations/qtcreator_pl.ts index 702550d9e55..56cdaa31b63 100644 --- a/share/qtcreator/translations/qtcreator_pl.ts +++ b/share/qtcreator/translations/qtcreator_pl.ts @@ -3590,8 +3590,8 @@ Kontynuować? Pokazuj przestrzeń nazw "std::" w widoku typów - <p>Shows "std::" prefix for types from the standard library. - <p>Pokazuje przedrostek "std::" dla typów z biblioteki standardowej. + Shows "std::" prefix for types from the standard library. + Pokazuje przedrostek "std::" dla typów z biblioteki standardowej. Show Qt's Namespace in Types @@ -3602,8 +3602,8 @@ Kontynuować? Pokazuj przestrzeń nazw Qt w widoku typów - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". - <p>Pokazuje przestrzeń nazw Qt dla typów Qt. To ma zastosowanie jedynie dla Qt skonfigurowanego z "-qtnamespace". + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Pokazuje przestrzeń nazw Qt dla typów Qt. To ma zastosowanie jedynie dla Qt skonfigurowanego z "-qtnamespace". Sort Members of Classes and Structs Alphabetically @@ -3618,8 +3618,8 @@ Kontynuować? Używaj programów pomocniczych debuggera - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - <p>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. + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + 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. "Poprawiaj położenie pułapek" przesuwa czerwone znaczniki pułapek w miejsca prawdziwych pułapek w takich przypadkach. @@ -3643,12 +3643,12 @@ Kontynuować? <p>Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku stosu podczas debugowania. - <p>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. - <p>Maksymalna długość ciągów znakowych w widoku "Zmienne lokalne i wyrażenia". Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. + The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. + Maksymalna długość ciągów znakowych w widoku "Zmienne lokalne i wyrażenia". Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - <p>Maksymalna długość ciągów znakowych w oddzielnych oknach. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + Maksymalna długość ciągów znakowych w oddzielnych oknach. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. Configure Debugger... @@ -3667,28 +3667,28 @@ Kontynuować? Rozmiar czcionki debuggera wzięty z głównego edytora - <p>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. - <p>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. + 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. + 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. Show QObject names if available Pokazuj dostępne nazwy QObject'ów - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. - <p>Pokazuje wartość właściwości "objectName" obiektów dziedziczących z QObject. Może to negatywnie wpłynąć na wydajność debuggera, nawet gdy żadne obiekty nie będą wyświetlane. + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + Pokazuje wartość właściwości "objectName" obiektów dziedziczących z QObject. Może to negatywnie wpłynąć na wydajność debuggera, nawet gdy żadne obiekty nie będą wyświetlane. Use code model Używaj modelu kodu - <p>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. - <p>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. + 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. + 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. - <p>Displays names of QThread based threads. - <p>Wyświetla nazwy wątków dziedziczących z QThread. + Displays names of QThread based threads. + Wyświetla nazwy wątków dziedziczących z QThread. Display thread names diff --git a/share/qtcreator/translations/qtcreator_ru.ts b/share/qtcreator/translations/qtcreator_ru.ts index 24028b07f18..e9fd7a81937 100644 --- a/share/qtcreator/translations/qtcreator_ru.ts +++ b/share/qtcreator/translations/qtcreator_ru.ts @@ -14462,8 +14462,8 @@ Affected are breakpoints %1 Автоматически разыменовывать указатели - <p>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. - <p>Переключает обзоры Переменных и выражений в режим автоматического разыменовывания указателей. Позволяет сократить размер дерева, но при этом теряются данные промежуточного уровня. + 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. + Переключает обзоры Переменных и выражений в режим автоматического разыменовывания указателей. Позволяет сократить размер дерева, но при этом теряются данные промежуточного уровня. Show "std::" Namespace in Types @@ -14474,8 +14474,8 @@ Affected are breakpoints %1 Показывать пространство имён «std::» в типах - <p>Shows "std::" prefix for types from the standard library. - <p>Отображение приставки «std::» для типов стандартной библиотеки. + Shows "std::" prefix for types from the standard library. + Отображение приставки «std::» для типов стандартной библиотеки. Show Qt's Namespace in Types @@ -14486,16 +14486,16 @@ Affected are breakpoints %1 Показывать пространство имён Qt в типах - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". - <p>Отображать приставку пространства имён Qt для типов Qt. Имеет смысл только тогда, когда Qt собран с параметром «-qtnamespace». + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Отображать приставку пространства имён Qt для типов Qt. Имеет смысл только тогда, когда Qt собран с параметром «-qtnamespace». Show QObject names if available Показывать доступные имена QObject - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. - <p>Отображает свойство objectName производных от QObject объектов. Может негативно сказаться на скорости работы отладчика, даже если нет подобных объектов. + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + Отображает свойство objectName производных от QObject объектов. Может негативно сказаться на скорости работы отладчика, даже если нет подобных объектов. Sort Members of Classes and Structs Alphabetically @@ -14514,28 +14514,28 @@ Affected are breakpoints %1 Использовать модель кода - <p>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. - <p>Включение приведёт к запросам модели кода C++ об области видимости переменной. Это может немного ускорить работу отладчика, но может и сбоить на оптимизированном коде. + 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. + Включение приведёт к запросам модели кода C++ об области видимости переменной. Это может немного ускорить работу отладчика, но может и сбоить на оптимизированном коде. - <p>Displays names of QThread based threads. - <p>Отображать названия потоков, основанных на QThread. + Displays names of QThread based threads. + Отображать названия потоков, основанных на QThread. Display thread names Отображать названия потоков - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - <p>Не все строки исходника приводят к созданию кода. Размещение на такой строке точки останова фактически приведёт к установке её на ближайшую последующую строку, создавшую код. Выбор «Подстраивать размещение точек останова» сдвинет красные метки на строки, где они фактически сработают. + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + Не все строки исходника приводят к созданию кода. Размещение на такой строке точки останова фактически приведёт к установке её на ближайшую последующую строку, создавшую код. Выбор «Подстраивать размещение точек останова» сдвинет красные метки на строки, где они фактически сработают. <p>Checking this will enable tooltips in the stack view during debugging. <p>Включает на время отладки всплывающие подсказки в обзоре стека. - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - <p>Максимальная длина строки в отдельных окнах. Более длинные строки обрезаются и завершаются многоточием. + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + Максимальная длина строки в отдельных окнах. Более длинные строки обрезаются и завершаются многоточием. Synchronize Breakpoints @@ -14602,8 +14602,8 @@ Affected are breakpoints %1 Зарегистрировать системным отладчиком - <p>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. - <p>Максимальная длина строковых значений в обзорах переменных и выражений. Более длинные строки обрезаются и завершаются многоточием. + The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. + Максимальная длина строковых значений в обзорах переменных и выражений. Более длинные строки обрезаются и завершаются многоточием. Reload Full Stack diff --git a/share/qtcreator/translations/qtcreator_uk.ts b/share/qtcreator/translations/qtcreator_uk.ts index 50d1f85f5f9..c50e8d22385 100644 --- a/share/qtcreator/translations/qtcreator_uk.ts +++ b/share/qtcreator/translations/qtcreator_uk.ts @@ -5047,8 +5047,8 @@ Qt Creator не може під'єднатись до нього.Розіменовувати вказівники автоматично - <p>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. - <p>Вмикає автоматичне розіменування вказівників у перегляді локальних змінних та виразів. Цим зберігається один рівень у відображенні деревом, однак втрачаються дані з проміжного рівня, що тепер буде відсутнім. + 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. + Вмикає автоматичне розіменування вказівників у перегляді локальних змінних та виразів. Цим зберігається один рівень у відображенні деревом, однак втрачаються дані з проміжного рівня, що тепер буде відсутнім. Show "std::" Namespace in Types @@ -5066,10 +5066,6 @@ Qt Creator не може під'єднатись до нього.Use Code Model Використовувати модель коду - - 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. - Вмикання призводить до запитів до моделі коду C++ за інформацією про область видимості змінної. Це може призвести до дещо швидшого зневадження, але може не спрацьовувати для оптимізованого коду. - Break on "abort" Перепиняти на "abort" @@ -5150,10 +5146,6 @@ Qt Creator не може під'єднатись до нього.Adjust Breakpoint Locations Підправляти розташування точок перепину - - 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - Не всі рядки тексту програми створюють виконуваний код. Встановлення точки перепину на такому рядку фактично встановить її на наступному рядку, що генерує код. В таких випадках вибір 'Підправляти розташування точок перепину' зміщує червоні позначки точок перепину до справжнього розташування точок перепину. - <p>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. <p>Перемикає зневаджувач в рідний-змішаний режим роботи. В цьому режимі крокування та відображення даних здійснюється рідним рушієм зневадження (GDB, LLDB або CDB) для коду C++, QML та JS. @@ -5167,24 +5159,24 @@ Qt Creator не може під'єднатись до нього.Показувати простір імен "std::" в типах - <p>Shows "std::" prefix for types from the standard library. - <p>Показувати префікс "std::" для типів зі стандартної бібліотеки. + Shows "std::" prefix for types from the standard library. + Показувати префікс "std::" для типів зі стандартної бібліотеки. Show Qt's namespace in types Показувати простір імен Qt в типах - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". - <p>Показувати префікс простору імен Qt для типів Qt. Це має сенс, якщо Qt було сконфігуровано з '-qtnamespace'. + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Показувати префікс простору імен Qt для типів Qt. Це має сенс, якщо Qt було сконфігуровано з '-qtnamespace'. Show QObject names if available Показувати назви QObject-ів, якщо можливо - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. - <p>Відображення властивості objectName елементів, що походять від QObject. Майте на увазі, що це може мати негативний вплив на швидкодію зневаджувача, навіть якщо QObject-и відсутні. + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + Відображення властивості objectName елементів, що походять від QObject. Майте на увазі, що це може мати негативний вплив на швидкодію зневаджувача, навіть якщо QObject-и відсутні. Sort members of classes and structs alphabetically @@ -5195,20 +5187,20 @@ Qt Creator не може під'єднатись до нього.Використовувати модель коду - <p>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. - <p>Вмикання призводить до запитів до моделі коду C++ за інформацією про область видимості змінної. Це може призвести до дещо швидшого зневадження, але може не спрацьовувати для оптимізованого коду. + 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. + Вмикання призводить до запитів до моделі коду C++ за інформацією про область видимості змінної. Це може призвести до дещо швидшого зневадження, але може не спрацьовувати для оптимізованого коду. - <p>Displays names of QThread based threads. - <p>Показувати назви ниток, що базуються на QThread. + Displays names of QThread based threads. + Показувати назви ниток, що базуються на QThread. Display thread names Показувати імена ниток - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - <p>Не всі рядки тексту програми створюють виконуваний код. Встановлення точки перепину на такому рядку фактично встановить її на наступному рядку, що генерує код. В таких випадках вибір 'Підправляти розташування точок перепину' зміщує червоні позначки точок перепину до справжнього розташування точок перепину. + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + Не всі рядки тексту програми створюють виконуваний код. Встановлення точки перепину на такому рядку фактично встановить її на наступному рядку, що генерує код. В таких випадках вибір 'Підправляти розташування точок перепину' зміщує червоні позначки точок перепину до справжнього розташування точок перепину. Break on "throw" @@ -5243,12 +5235,12 @@ Qt Creator не може під'єднатись до нього.<p>Вмикає відображення стовпця з інформацією про адресу в перегляді стека під час зневадження. - <p>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. - <p>Максимальна довжина рядка елементу в панелі "Локальні змінні та вирази". Довші рядки будуть обрізані та відображені з трикрапкою. + The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. + Максимальна довжина рядка елементу в панелі "Локальні змінні та вирази". Довші рядки будуть обрізані та відображені з трикрапкою. - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - <p>Максимальна довжина рядків в відокремлених вікнах. Довші рядки будуть обрізані та відображені з трикрапкою. + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + Максимальна довжина рядків в відокремлених вікнах. Довші рядки будуть обрізані та відображені з трикрапкою. 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. @@ -5294,14 +5286,6 @@ Qt Creator не може під'єднатись до нього.Register For Post-Mortem Debugging Зареєструвати для посмертного зневадження - - The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. - Максимальна довжина рядка елементу в панелі "Локальні змінні та вирази". Довші рядки будуть обрізані та відображені з трикрапкою. - - - The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - Максимальна довжина рядків в відокремлених вікнах. Довші рядки будуть обрізані та відображені з трикрапкою. - Reload Full Stack Перезавантажити повний стек @@ -35714,14 +35698,6 @@ Install an SDK of at least API version %1. Makes use of Qt Creator's code model to find out if a variable has already been assigned a value at the point the debugger interrupts. Вмикає використання моделі коду Qt Creator для з'ясування того, чи змінній вже було присвоєно значення в момент зупинки зневаджувача. - - Displays names of QThread based threads. - Показувати назви ниток, що базуються на QThread. - - - Shows "std::" prefix for types from the standard library. - Показувати префікс "std::" для типів зі стандартної бібліотеки. - Show "std::" namespace for types Показувати простір імен "std::" для типів diff --git a/share/qtcreator/translations/qtcreator_zh_CN.ts b/share/qtcreator/translations/qtcreator_zh_CN.ts index 1d0b3bb0645..c4e60b55830 100644 --- a/share/qtcreator/translations/qtcreator_zh_CN.ts +++ b/share/qtcreator/translations/qtcreator_zh_CN.ts @@ -15668,7 +15668,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>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. + 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. @@ -15708,7 +15708,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>Shows "std::" prefix for types from the standard library. + Shows "std::" prefix for types from the standard library. @@ -15716,7 +15716,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". @@ -15724,7 +15724,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. + Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present. @@ -15732,15 +15732,15 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>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. + 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. - <p>Displays names of QThread based threads. + Displays names of QThread based threads. - <p>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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + 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 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. @@ -15836,7 +15836,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>Shows simple variable values as annotations in the main editor during debugging. + Shows simple variable values as annotations in the main editor during debugging. @@ -15856,15 +15856,15 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>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. + 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. - <p>Enables tooltips in the locals view during debugging. + Enables tooltips in the locals view during debugging. - <p>Enables tooltips in the breakpoints view during debugging. + Enables tooltips in the breakpoints view during debugging. @@ -15872,7 +15872,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>Enables tooltips in the stack view during debugging. + Enables tooltips in the stack view during debugging. @@ -15892,7 +15892,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. + The maximum length of string entries in the Locals and Expressions views. Longer than that are cut off and displayed with an ellipsis attached. @@ -15900,7 +15900,7 @@ Install the "Qt Debug Information Files" Package from the Maintenance - <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. diff --git a/src/libs/qtcreatorcdbext/CMakeLists.txt b/src/libs/qtcreatorcdbext/CMakeLists.txt index 7bf3bcc9e89..8c95cb400b8 100644 --- a/src/libs/qtcreatorcdbext/CMakeLists.txt +++ b/src/libs/qtcreatorcdbext/CMakeLists.txt @@ -75,8 +75,9 @@ if (_library_enabled) else() set(PythonZipFileName "python${CMAKE_MATCH_4}.zip") 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(PythonZip "${CMAKE_MATCH_1}/${PythonZipFileName}") @@ -92,6 +93,76 @@ if (_library_enabled) return() 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 DEPENDS "${Python3_LIBRARIES}" INCLUDES "${Python3_INCLUDE_DIRS}" diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp index 7bf750412f6..434d6474103 100644 --- a/src/plugins/autotest/testresultmodel.cpp +++ b/src/plugins/autotest/testresultmodel.cpp @@ -197,6 +197,23 @@ QString TestResultItem::resultString() const 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 &types) const +{ + return !m_descendantsTypes.isEmpty() && m_descendantsTypes.intersects(types); +} + /********************************* TestResultModel *****************************************/ TestResultModel::TestResultModel(QObject *parent) @@ -217,7 +234,8 @@ void TestResultModel::updateParent(const TestResultItem *item) return; bool changed = false; parentItem->updateResult(changed, item->testResult().result(), item->summaryResult()); - if (!changed) + bool changedType = parentItem->updateDescendantTypes(item->testResult().result()); + if (!changed && !changedType) return; emit dataChanged(parentItem->index(), parentItem->index()); updateParent(parentItem); @@ -426,10 +444,6 @@ TestResultFilterModel::TestResultFilterModel(TestResultModel *sourceModel, QObje { setSourceModel(sourceModel); 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) @@ -441,7 +455,7 @@ void TestResultFilterModel::enableAllResultTypes(bool enabled) << ResultType::MessageFatal << ResultType::Invalid << ResultType::BlacklistedPass << ResultType::BlacklistedFail << ResultType::BlacklistedXFail << ResultType::BlacklistedXPass << ResultType::Benchmark - << ResultType::MessageCurrentTest << ResultType::TestStart << ResultType::TestEnd + << ResultType::MessageCurrentTest << ResultType::MessageInfo << ResultType::MessageSystem << ResultType::Application << ResultType::MessageError; } else { @@ -499,34 +513,21 @@ bool TestResultFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &s QModelIndex index = m_sourceModel->index(sourceRow, 0, sourceParent); if (!index.isValid()) return false; + const ResultType resultType = m_sourceModel->testResult(index).result(); if (resultType == ResultType::TestStart) { - TestResultItem *item = m_sourceModel->itemForIndex(index); - QTC_ASSERT(item, return false); - if (!item->summaryResult()) - return true; - return acceptTestCaseResult(index); + auto item = m_sourceModel->itemForIndex(index); + return item && item->descendantTypesContainsAnyOf(m_enabled); + } else if (resultType == ResultType::TestEnd) { + auto item = m_sourceModel->itemForIndex(index); + if (!item) + return false; + auto parent = item->parent(); + return parent && parent->descendantTypesContainsAnyOf(m_enabled); } + 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; -} - } // namespace Internal } // namespace Autotest diff --git a/src/plugins/autotest/testresultmodel.h b/src/plugins/autotest/testresultmodel.h index 97655ca57b9..cbf3422b78f 100644 --- a/src/plugins/autotest/testresultmodel.h +++ b/src/plugins/autotest/testresultmodel.h @@ -44,8 +44,12 @@ public: QString resultString() const; std::optional summaryResult() const { return m_summaryResult; } + bool updateDescendantTypes(ResultType t); + bool descendantTypesContainsAnyOf(const QSet &types) const; + private: TestResult m_testResult; + QSet m_descendantsTypes; std::optional m_summaryResult; }; @@ -99,7 +103,6 @@ protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; private: - bool acceptTestCaseResult(const QModelIndex &srcIndex) const; TestResultModel *m_sourceModel; QSet m_enabled; }; diff --git a/src/plugins/autotest/testresultspane.cpp b/src/plugins/autotest/testresultspane.cpp index d101d2027b3..87d44b0f2f9 100644 --- a/src/plugins/autotest/testresultspane.cpp +++ b/src/plugins/autotest/testresultspane.cpp @@ -107,6 +107,7 @@ TestResultsPane::TestResultsPane(QObject *parent) : m_model = new TestResultModel(this); m_filterModel = new TestResultFilterModel(m_model, this); m_filterModel->setDynamicSortFilter(true); + m_filterModel->setRecursiveFilteringEnabled(true); m_treeView->setModel(m_filterModel); TestResultDelegate *trd = new TestResultDelegate(this); m_treeView->setItemDelegate(trd); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 459abb122ea..7b398fac5be 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -502,6 +502,10 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : updateInitialCMakeArguments(); }); + connect(m_buildSystem->target()->project(), &Project::aboutToSaveSettings, this, [this] { + updateInitialCMakeArguments(); + }); + connect(bc->aspect(), &Utils::BaseAspect::labelLinkActivated, this, diff --git a/src/plugins/coreplugin/patchtool.cpp b/src/plugins/coreplugin/patchtool.cpp index 40493217486..9af08353807 100644 --- a/src/plugins/coreplugin/patchtool.cpp +++ b/src/plugins/coreplugin/patchtool.cpp @@ -24,9 +24,18 @@ FilePath PatchTool::patchCommand() QSettings *s = ICore::settings(); s->beginGroup(settingsGroupC); - const FilePath command = FilePath::fromSettings(s->value(patchCommandKeyC, patchCommandDefaultC)); + FilePath command = FilePath::fromSettings(s->value(patchCommandKeyC, patchCommandDefaultC)); 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; } diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index b871010a0a4..d04d6c70eb6 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -364,11 +364,15 @@ static FilePath getClangHeadersPath(const FilePath &clangdFilePath) const QVersionNumber version = Utils::clangdVersion(clangdFilePath); QTC_ASSERT(!version.isNull(), return {}); static const QStringList libDirs{"lib", "lib64"}; + const QStringList versionStrings{QString::number(version.majorVersion()), version.toString()}; for (const QString &libDir : libDirs) { - const FilePath includePath = clangdFilePath.absolutePath().parentDir().pathAppended(libDir) - .pathAppended("clang").pathAppended(version.toString()).pathAppended("include"); - if (includePath.exists()) - return includePath; + for (const QString &versionString : versionStrings) { + const FilePath includePath = clangdFilePath.absolutePath().parentDir() + .pathAppended(libDir).pathAppended("clang") + .pathAppended(versionString).pathAppended("include"); + if (includePath.exists()) + return includePath; + } } QTC_CHECK(false); return {}; diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 253cf3f6e0d..5c5d8b1e74b 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -1274,9 +1274,15 @@ void CdbEngine::showScriptMessages(const QString &message) const { GdbMi gdmiMessage; gdmiMessage.fromString(message); - if (!gdmiMessage.isValid()) + if (gdmiMessage.isValid()) + showScriptMessages(gdmiMessage); + else 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") showMessage(msg["msg"].data(), LogMisc); else @@ -2085,11 +2091,11 @@ void CdbEngine::handleExtensionMessage(char t, int token, const QString &what, c if (t == 'R') { response.resultClass = ResultDone; response.data.fromString(message); - if (!response.data.isValid()) { + if (response.data.isValid()) { + showScriptMessages(response.data); + } else { response.data.m_data = message; response.data.m_type = GdbMi::Tuple; - } else { - showScriptMessages(message); } } else { response.resultClass = ResultError; @@ -2273,6 +2279,19 @@ void CdbEngine::parseOutputLine(QString line) while (isCdbPrompt(line)) line.remove(0, CdbPromptLength); // 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 = "|"; if (line.startsWith(creatorExtPrefix)) { // "|type_char|token|remainingChunks|serviceName|message" diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 20551830183..3bea692d5b5 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -137,6 +137,7 @@ private: void postResolveSymbol(const QString &module, const QString &function, DisassemblerAgent *agent); void showScriptMessages(const QString &message) const; + void showScriptMessages(const GdbMi &message) const; void handleInitialSessionIdle(); // Builtin commands void handleStackTrace(const DebuggerResponse &); diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 9cac466826e..a3a6187a417 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -122,10 +122,12 @@ DebuggerSettings::DebuggerSettings() autoDerefPointers.setLabelText(Tr::tr("Dereference Pointers Automatically")); autoDerefPointers.setDefaultValue(true); autoDerefPointers.setSettingsKey(debugModeGroup, "AutoDerefPointers"); - autoDerefPointers.setToolTip(Tr::tr("

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.")); + autoDerefPointers.setToolTip( + "

" + + Tr::tr("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.")); // // Cdb Options @@ -186,22 +188,26 @@ DebuggerSettings::DebuggerSettings() showStdNamespace.setDefaultValue(true); showStdNamespace.setDisplayName(Tr::tr("Show \"std::\" Namespace in Types")); showStdNamespace.setLabelText(Tr::tr("Show \"std::\" namespace in types")); - showStdNamespace.setToolTip(Tr::tr("

Shows \"std::\" prefix for types from the standard library.")); + showStdNamespace.setToolTip( + "

" + Tr::tr("Shows \"std::\" prefix for types from the standard library.")); showQtNamespace.setSettingsKey(debugModeGroup, "ShowQtNamespace"); showQtNamespace.setDefaultValue(true); showQtNamespace.setDisplayName(Tr::tr("Show Qt's Namespace in Types")); showQtNamespace.setLabelText(Tr::tr("Show Qt's namespace in types")); - showQtNamespace.setToolTip(Tr::tr("

Shows Qt namespace prefix for Qt types. This is only " - "relevant if Qt was configured with \"-qtnamespace\".")); + showQtNamespace.setToolTip("

" + + Tr::tr("Shows Qt namespace prefix for Qt types. This is only " + "relevant if Qt was configured with \"-qtnamespace\".")); showQObjectNames.setSettingsKey(debugModeGroup, "ShowQObjectNames2"); showQObjectNames.setDefaultValue(true); showQObjectNames.setDisplayName(Tr::tr("Show QObject names if available")); showQObjectNames.setLabelText(Tr::tr("Show QObject names if available")); - showQObjectNames.setToolTip(Tr::tr("

Displays the objectName property of QObject based items. " - "Note that this can negatively impact debugger performance " - "even if no QObjects are present.")); + showQObjectNames.setToolTip( + "

" + + Tr::tr("Displays the objectName property of QObject based items. " + "Note that this can negatively impact debugger performance " + "even if no QObjects are present.")); sortStructMembers.setSettingsKey(debugModeGroup, "SortStructMembers"); sortStructMembers.setDisplayName(Tr::tr("Sort Members of Classes and Structs Alphabetically")); @@ -218,14 +224,15 @@ DebuggerSettings::DebuggerSettings() useCodeModel.setSettingsKey(debugModeGroup, "UseCodeModel"); useCodeModel.setDefaultValue(true); useCodeModel.setLabelText(Tr::tr("Use code model")); - useCodeModel.setToolTip(Tr::tr("

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.")); + useCodeModel.setToolTip( + "

" + + Tr::tr("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.")); showThreadNames.setSettingsKey(debugModeGroup, "ShowThreadNames"); showThreadNames.setLabelText(Tr::tr("Display thread names")); - showThreadNames.setToolTip(Tr::tr("

Displays names of QThread based threads.")); - + showThreadNames.setToolTip("

" + Tr::tr("Displays names of QThread based threads.")); // // Breakpoints @@ -233,12 +240,14 @@ DebuggerSettings::DebuggerSettings() synchronizeBreakpoints.setLabelText(Tr::tr("Synchronize Breakpoints")); adjustBreakpointLocations.setDisplayName(Tr::tr("Adjust Breakpoint Locations")); - adjustBreakpointLocations.setToolTip(Tr::tr("

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 'Adjust Breakpoint Locations' shifts the red " - "breakpoint markers in such cases to the location of the true " - "breakpoint.")); + adjustBreakpointLocations.setToolTip( + "

" + + Tr::tr("

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 'Adjust Breakpoint Locations' shifts the red " + "breakpoint markers in such cases to the location of the true " + "breakpoint.")); adjustBreakpointLocations.setDefaultValue(true); adjustBreakpointLocations.setSettingsKey(debugModeGroup, "AdjustBreakpointLocations"); adjustBreakpointLocations.setLabelText(Tr::tr( @@ -399,8 +408,10 @@ DebuggerSettings::DebuggerSettings() useAnnotationsInMainEditor.setSettingsKey(debugModeGroup, "UseAnnotations"); useAnnotationsInMainEditor.setLabelText(Tr::tr("Use annotations in main editor when debugging")); - useAnnotationsInMainEditor.setToolTip(Tr::tr("

Shows simple variable values " - "as annotations in the main editor during debugging.")); + useAnnotationsInMainEditor.setToolTip( + "

" + + Tr::tr("Shows simple variable values " + "as annotations in the main editor during debugging.")); useAnnotationsInMainEditor.setDefaultValue(true); usePseudoTracepoints.setSettingsKey(debugModeGroup, "UsePseudoTracepoints"); @@ -417,26 +428,31 @@ DebuggerSettings::DebuggerSettings() useToolTipsInMainEditor.setSettingsKey(debugModeGroup, "UseToolTips"); useToolTipsInMainEditor.setLabelText(Tr::tr("Use tooltips in main editor when debugging")); - useToolTipsInMainEditor.setToolTip(Tr::tr("

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.")); + useToolTipsInMainEditor.setToolTip( + "

" + + Tr::tr("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.")); useToolTipsInMainEditor.setDefaultValue(true); useToolTipsInLocalsView.setSettingsKey(debugModeGroup, "UseToolTipsInLocalsView"); useToolTipsInLocalsView.setLabelText(Tr::tr("Use Tooltips in Locals View when Debugging")); - useToolTipsInLocalsView.setToolTip(Tr::tr("

Enables tooltips in the locals " - "view during debugging.")); + useToolTipsInLocalsView.setToolTip("

" + + Tr::tr("Enables tooltips in the locals " + "view during debugging.")); useToolTipsInBreakpointsView.setSettingsKey(debugModeGroup, "UseToolTipsInBreakpointsView"); useToolTipsInBreakpointsView.setLabelText(Tr::tr("Use Tooltips in Breakpoints View when Debugging")); - useToolTipsInBreakpointsView.setToolTip(Tr::tr("

Enables tooltips in the breakpoints " - "view during debugging.")); + useToolTipsInBreakpointsView.setToolTip("

" + + Tr::tr("Enables tooltips in the breakpoints " + "view during debugging.")); useToolTipsInStackView.setSettingsKey(debugModeGroup, "UseToolTipsInStackView"); useToolTipsInStackView.setLabelText(Tr::tr("Use Tooltips in Stack View when Debugging")); - useToolTipsInStackView.setToolTip(Tr::tr("

Enables tooltips in the stack " - "view during debugging.")); + useToolTipsInStackView.setToolTip("

" + + Tr::tr("Enables tooltips in the stack " + "view during debugging.")); useToolTipsInStackView.setDefaultValue(true); skipKnownFrames.setSettingsKey(debugModeGroup, "SkipKnownFrames"); @@ -498,9 +514,11 @@ DebuggerSettings::DebuggerSettings() displayStringLimit.setRange(20, 10000); displayStringLimit.setSingleStep(10); displayStringLimit.setLabelText(Tr::tr("Display string length:")); - displayStringLimit.setToolTip(Tr::tr("

The maximum length of string entries in the " - "Locals and Expressions views. Longer than that are cut off " - "and displayed with an ellipsis attached.")); + displayStringLimit.setToolTip( + "

" + + Tr::tr("The maximum length of string entries in the " + "Locals and Expressions views. Longer than that are cut off " + "and displayed with an ellipsis attached.")); maximalStringLength.setSettingsKey(debugModeGroup, "MaximalStringLength"); maximalStringLength.setDefaultValue(10000); @@ -508,8 +526,10 @@ DebuggerSettings::DebuggerSettings() maximalStringLength.setRange(20, 10000000); maximalStringLength.setSingleStep(20); maximalStringLength.setLabelText(Tr::tr("Maximum string length:")); - maximalStringLength.setToolTip(Tr::tr("

The maximum length for strings in separated windows. " - "Longer strings are cut off and displayed with an ellipsis attached.")); + maximalStringLength.setToolTip( + "

" + + Tr::tr("The maximum length for strings in separated windows. " + "Longer strings are cut off and displayed with an ellipsis attached.")); expandStack.setLabelText(Tr::tr("Reload Full Stack")); diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index a9609584c6e..aa2283a0736 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -380,6 +380,10 @@ public: void doShutdownEngine() { m_engine->setState(EngineShutdownRequested); + if (m_engine->isDying()) { + m_engine->notifyEngineShutdownFinished(); + return; + } m_engine->startDying(); m_engine->showMessage("CALL: SHUTDOWN ENGINE"); m_engine->shutdownEngine(); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 1894dd3f4e5..3fd126a4b07 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -114,6 +114,7 @@ struct TracepointCaptureData }; const char tracepointCapturePropertyName[] = "GDB.TracepointCapture"; +const char notCompatibleMessage[] = "is not compatible with target architecture"; /////////////////////////////////////////////////////////////////////// // @@ -346,8 +347,13 @@ void GdbEngine::handleResponse(const QString &buff) // version and/or OS version used. if (data.startsWith("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_pendingLogStreamOutput += data; diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index b0e60b934ac..cd3a21ffbde 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -130,6 +130,7 @@ private: ////////// General Interface ////////// bool m_rerunPending = false; bool m_ignoreNextTrap = false; + bool m_detectTargetIncompat = false; ////////// Gdb Output, State & Capability Handling ////////// diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 18f89b5968a..c715cff6d0f 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -276,6 +276,9 @@ void BuildSettingsWidget::cloneConfiguration() if (name.isEmpty()) 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); if (!bc) return; diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp index 7a8f19926f8..c1b0e498f0c 100644 --- a/src/plugins/qnx/qnxconfiguration.cpp +++ b/src/plugins/qnx/qnxconfiguration.cpp @@ -283,7 +283,7 @@ void QnxConfiguration::createKit(const Target &target, const QnxToolChainMap &to .arg(displayName()) .arg(target.shortDescription())); - k->setAutoDetected(true); + k->setAutoDetected(false); k->setAutoDetectionSource(envFile().toString()); k->setMutable(DeviceKitAspect::id(), true); diff --git a/src/plugins/qnx/qnxconfigurationmanager.cpp b/src/plugins/qnx/qnxconfigurationmanager.cpp index f947d4a6e25..da585b69cf2 100644 --- a/src/plugins/qnx/qnxconfigurationmanager.cpp +++ b/src/plugins/qnx/qnxconfigurationmanager.cpp @@ -29,7 +29,6 @@ QnxConfigurationManager::QnxConfigurationManager() { m_instance = this; m_writer = new PersistentSettingsWriter(qnxConfigSettingsFileName(), "QnxConfigurations"); - restoreConfigurations(); connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested, this, &QnxConfigurationManager::saveConfigs); } diff --git a/src/plugins/qnx/qnxconfigurationmanager.h b/src/plugins/qnx/qnxconfigurationmanager.h index 56ca4e6d772..bc0d02dd988 100644 --- a/src/plugins/qnx/qnxconfigurationmanager.h +++ b/src/plugins/qnx/qnxconfigurationmanager.h @@ -19,6 +19,8 @@ public: QnxConfigurationManager(); ~QnxConfigurationManager() override; + void restoreConfigurations(); + static QnxConfigurationManager *instance(); QList configurations() const; void removeConfiguration(QnxConfiguration *config); @@ -34,7 +36,6 @@ signals: private: QList m_configurations; Utils::PersistentSettingsWriter *m_writer; - void restoreConfigurations(); }; } // Qnx::Internal diff --git a/src/plugins/qnx/qnxplugin.cpp b/src/plugins/qnx/qnxplugin.cpp index e29b248bcaf..c6664b9f600 100644 --- a/src/plugins/qnx/qnxplugin.cpp +++ b/src/plugins/qnx/qnxplugin.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -90,7 +91,7 @@ public: QAction *m_debugSeparator = nullptr; QAction m_attachToQnxApplication{Tr::tr("Attach to remote QNX application..."), nullptr}; - QnxConfigurationManager configurationFactory; + QnxConfigurationManager configurationManager; QnxQtVersionFactory qtVersionFactory; QnxDeviceFactory deviceFactory; QnxDeployConfigurationFactory deployConfigFactory; @@ -122,6 +123,10 @@ private: void QnxPlugin::extensionsInitialized() { + // Can't do yet as not all devices are around. + connect(DeviceManager::instance(), &DeviceManager::devicesLoaded, + &d->configurationManager, &QnxConfigurationManager::restoreConfigurations); + // Attach support connect(&d->m_attachToQnxApplication, &QAction::triggered, this, &showAttachToProcessDialog); diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 91b9818de7f..25a9f5f3a78 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -852,14 +852,6 @@ static bool canLinkWithQt(QString *toolTip) tip << Tr::tr("%1's resource directory is not writable.") .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(); if (!link.isEmpty()) tip << Tr::tr("%1 is currently linked to \"%2\".") diff --git a/src/plugins/vcsbase/submiteditorwidget.cpp b/src/plugins/vcsbase/submiteditorwidget.cpp index 0987faf60ab..eaac1d61d2d 100644 --- a/src/plugins/vcsbase/submiteditorwidget.cpp +++ b/src/plugins/vcsbase/submiteditorwidget.cpp @@ -309,6 +309,7 @@ void SubmitEditorWidget::wrapDescription() e.setVisible(false); e.setMinimumWidth(1000); e.setFontPointSize(1.0); + e.setFontFamily({}); // QTBUG-111466 e.setLineWrapColumnOrWidth(d->description->lineWrapColumnOrWidth()); e.setLineWrapMode(d->description->lineWrapMode()); e.setWordWrapMode(d->description->wordWrapMode()); diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 39156f9a880..a1df2ae70c5 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -3473,18 +3473,22 @@ void tst_Dumpers::dumper_data() QTest::newRow("QPointer") << Data("#include \n" - "#include \n", + "#include \n" + "struct MyClass : public QObject { int val = 44; };\n", "QTimer timer;\n" "QPointer ptr0;\n" - "QPointer ptr1(&timer);", + "QPointer ptr1(&timer);" + "QPointer ptr2(new MyClass());", - "&timer, &ptr0, &ptr1") + "&timer, &ptr0, &ptr1, &ptr2") + CoreProfile() + 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") @@ -7912,7 +7916,7 @@ void tst_Dumpers::dumper_data() + QmlPrivateProfile() + 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("v11", "true", "@QJSValue (bool)") + Check("v12", "1", "@QJSValue (int)") @@ -8117,17 +8121,6 @@ void tst_Dumpers::dumper_data() + 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", "", "") % GdbEngine - + Check("f.b", "", "") % CdbEngine; - QTest::newRow("LongDouble") << Data("", diff --git a/tests/system/settings/windows/QtProject/qtcreator/profiles.xml b/tests/system/settings/windows/QtProject/qtcreator/profiles.xml index 12a3998034c..1a46caa099c 100644 --- a/tests/system/settings/windows/QtProject/qtcreator/profiles.xml +++ b/tests/system/settings/windows/QtProject/qtcreator/profiles.xml @@ -68,7 +68,9 @@ {1b25f20a-d584-4fb7-85b3-74dd15b82f6f} Desktop Device Desktop - + + SQUISH_ENV_MODIFICATION + {c96cfaf3-fb8a-472b-b3c7-e94e8c490f17} diff --git a/tests/system/settings/windows/QtProject/qtcreator/toolchains.xml b/tests/system/settings/windows/QtProject/qtcreator/toolchains.xml index 2b74b28f266..81822bd1fab 100644 --- a/tests/system/settings/windows/QtProject/qtcreator/toolchains.xml +++ b/tests/system/settings/windows/QtProject/qtcreator/toolchains.xml @@ -44,7 +44,7 @@ PATH 0 - SQUISH_MSVC2017_PATH + SQUISH_MSVC2017_64_PATH MSVC2017 (amd64) @@ -59,6 +59,13 @@ x86-windows-msvc2015-pe-32bit C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat x86 + + + PATH + 0 + SQUISH_MSVC2017_32_PATH + + true Microsoft Visual C++ Compiler 14.0 (x86) ProjectExplorer.ToolChain.Msvc:{c96cfaf3-fb8a-472b-b3c7-e94e8c490f17} @@ -72,6 +79,13 @@ x86-windows-msvc2015-pe-32bit C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat x86 + + + PATH + 0 + SQUISH_MSVC2017_32_PATH + + true Microsoft Visual C++ Compiler 14.0 (x86) ProjectExplorer.ToolChain.Msvc:{ed856706-2a9d-4745-9d85-4e322b6f91d4} @@ -89,7 +103,7 @@ PATH 0 - SQUISH_MSVC2017_PATH + SQUISH_MSVC2017_64_PATH MSVC2017 (amd64) @@ -108,7 +122,7 @@ PATH 0 - SQUISH_MSVC2019_PATH + SQUISH_MSVC2019_64_PATH MSVC2019 (amd64) @@ -127,7 +141,7 @@ PATH 0 - SQUISH_MSVC2019_PATH + SQUISH_MSVC2019_64_PATH MSVC2019 (amd64) diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py index 9fd54aec0e5..f82f3c6e09d 100644 --- a/tests/system/shared/qtcreator.py +++ b/tests/system/shared/qtcreator.py @@ -237,18 +237,20 @@ def substituteCdb(settingsDir): 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']: test.fatal('Unexpected MSVC version - "%s" not implemented yet.' % version) return + hostArch = "Hostx64" if targetBitness == 64 else "Hostx86" + targetArch = "x64" if targetBitness == 64 else "x86" for msvcFlavor in ["Community", "BuildTools"]: try: msvcPath = os.path.join("C:\\Program Files (x86)", "Microsoft Visual Studio", 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'), - "SQUISH_MSVC%s_PATH" % version, msvcPath) + "SQUISH_MSVC%s_%d_PATH" % (version, targetBitness), msvcPath) return except: continue @@ -256,6 +258,26 @@ def substituteMsvcPaths(settingsDir, 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): if platform.system() == 'Linux': supportedABIs = filter(lambda x: 'linux' in x, supportedABIs) @@ -350,8 +372,10 @@ def copySettingsToTmpDir(destination=None, omitFiles=[]): substituteDefaultCompiler(tmpSettingsDir) elif platform.system() in ('Windows', 'Microsoft'): substituteCdb(tmpSettingsDir) - substituteMsvcPaths(tmpSettingsDir, '2017') - substituteMsvcPaths(tmpSettingsDir, '2019') + substituteMsvcPaths(tmpSettingsDir, '2017', 64) + substituteMsvcPaths(tmpSettingsDir, '2017', 32) + substituteMsvcPaths(tmpSettingsDir, '2019', 64) + prependWindowsKit(tmpSettingsDir, 32) substituteOnlineInstallerPath(tmpSettingsDir) substituteUnchosenTargetABIs(tmpSettingsDir) SettingsPath = ['-settingspath', '"%s"' % tmpSettingsDir]