From 330a6f793c5a06c00fec39c8057bd1ff22692ae5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 15 Feb 2023 17:10:26 +0100 Subject: [PATCH 01/29] Link with Qt: Remove now harmful check The check was trying to find out if the Qt Creator installation is part of the online installer or a Qt installer, by checking if there are install settings without the key "Settings/InstallSettings". Since we made Qt Creator optional in the installer, the install settings contain that redirection key anyway, so it is no longer an indicator for Qt Creator being part of the online or an Qt installer anymore. Actually the check now _disables_ the Link with Qt button for the commercial Qt Creator offline installer on macOS, because that ships install settings that add the plugin path to the commercial plugins outside the Qt Creator app bundle, but does not contain "Settings/ InstallSettings". Just remove the check. Change-Id: I88c3ef007a728dff0f4214e5a5683ffcede23796 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/qtsupport/qtoptionspage.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 56bd6d47224..8ae0e5d639e 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\".") From 78218cd601ed64407b43eb30f19eac944f65a826 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 17 Feb 2023 13:37:42 +0100 Subject: [PATCH 02/29] Add change log for 9.0.2 Change-Id: Ie94ae6ffab82fcc9eb86275d57c5990f5f1d8ae3 Reviewed-by: Leena Miettinen --- dist/changelog/changes-9.0.2.md | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 dist/changelog/changes-9.0.2.md 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 From 4de07bf444797348d9acde457a36fe7bd11f8ea4 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 22 Feb 2023 11:45:46 +0100 Subject: [PATCH 03/29] Qnx: Mark new kits from setup dialog as not autodetected It's more flexible for the user to have them modifiable. Tendency nowadays is to only have SDK-provided kits (or possibly everything that also 'goes away byitself' marked autodetected. Change-Id: I0098196320abe73998c38e9944fcb89554e36bb7 Reviewed-by: Christian Stenger --- src/plugins/qnx/qnxconfiguration.cpp | 2 +- src/plugins/qnx/qnxconfigurationmanager.cpp | 1 - src/plugins/qnx/qnxconfigurationmanager.h | 3 ++- src/plugins/qnx/qnxplugin.cpp | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) 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..25262c394fa 100644 --- a/src/plugins/qnx/qnxplugin.cpp +++ b/src/plugins/qnx/qnxplugin.cpp @@ -90,7 +90,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 +122,9 @@ private: void QnxPlugin::extensionsInitialized() { + // Can't do in init as not all devices are around. + d->configurationManager.restoreConfigurations(); + // Attach support connect(&d->m_attachToQnxApplication, &QAction::triggered, this, &showAttachToProcessDialog); From efe5735452cdf8c847f2b00105f4c962da3828a9 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 24 Feb 2023 09:25:15 +0100 Subject: [PATCH 04/29] Debugger: optimize logging script messages Avoid parsing the gdbmi output twice just for printing out messages to the debugger log. Change-Id: I928fc3a7d55c318056afff09cfbc25d115932bc0 Reviewed-by: Christian Stenger --- src/plugins/debugger/cdb/cdbengine.cpp | 16 +++++++++++----- src/plugins/debugger/cdb/cdbengine.h | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 253cf3f6e0d..0ecdbf8d1a5 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; 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 &); From a4fb9e20cb0395568264c89a8e75d35e5f007fae Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 27 Feb 2023 09:15:17 +0100 Subject: [PATCH 05/29] Debugger: improve dump time for various msvc std containers ... by caching the info whether we have a debug build. This avoids expanding members of the container to check for a potential offset of the actual data. Change-Id: I4d7ac83003c303185ae51d57f0f0571b627edf22 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 1 + share/qtcreator/debugger/stdtypes.py | 93 +++++++++++++++++++--------- 2 files changed, 65 insertions(+), 29 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index f72ea04b38d..42b2a8c829f 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/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) From 78d17390b8b922efa7681e1ebab7d8c626a1f66d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 27 Feb 2023 13:49:12 +0100 Subject: [PATCH 06/29] macOS: Allow Squish to attach itself for RTA https://kb.froglogic.com/squish/mac/troubleshoot/hardened-runtime/#which-entitlements-squish-needs Fixes: SQUISH-15904 Change-Id: Ib3a07ce2cb33d8fef63b21b19af3b7aabbab88ea Reviewed-by: Christian Stenger --- dist/installer/mac/entitlements.plist | 3 +++ 1 file changed, 3 insertions(+) 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 + From 6bb756ba1c671cf6a5276f31140589ca9481ddd0 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 27 Feb 2023 13:33:15 +0100 Subject: [PATCH 07/29] Debugger actions: Move

out of tr() This is just there at the front to force word-wrap on the tooltips, it shouldn't be part of the translated text. Change-Id: I62157aba303071677ca89929f9e56c03ee1f21e7 Reviewed-by: Leena Miettinen Reviewed-by: hjk --- share/qtcreator/translations/qtcreator_da.ts | 36 +++---- share/qtcreator/translations/qtcreator_de.ts | 56 +++++------ share/qtcreator/translations/qtcreator_ja.ts | 40 ++++---- share/qtcreator/translations/qtcreator_pl.ts | 36 +++---- share/qtcreator/translations/qtcreator_ru.ts | 36 +++---- share/qtcreator/translations/qtcreator_uk.ts | 36 +++---- .../qtcreator/translations/qtcreator_zh_CN.ts | 28 +++--- src/plugins/debugger/debuggeractions.cpp | 96 +++++++++++-------- 8 files changed, 192 insertions(+), 172 deletions(-) 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..9b864e3efee 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 @@ -5167,24 +5167,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 +5195,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 +5243,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. 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/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")); From 463090db0399e30732d64abb4300564c592ac9d9 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 17 Feb 2023 13:44:03 +0100 Subject: [PATCH 08/29] Update change log for 10.0 Change-Id: I39929f6a5947f6c164e5b2dd3802b54539b1190b Reviewed-by: Leena Miettinen --- dist/changelog/changes-10.0.0.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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 From 87c00b86dbf75a9204041b0b8e836415b97dc125 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 26 Feb 2023 23:44:51 +0200 Subject: [PATCH 09/29] Debugger: Fix write error on terminated GDB process Stopping/Aborting the debugger popped an error message saying "An error occurred when attempting to write to the process." Change-Id: Iceb41ea6144cb4d5a6384862da5bf5638f78f519 Reviewed-by: hjk --- src/plugins/debugger/debuggerengine.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 14cab127508..adeb4728f1e 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(); From cdee94d6419820c27e3f95fed60167cebd410825 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 23 Feb 2023 15:06:22 +0100 Subject: [PATCH 10/29] CMakePM: Ensure Initial Parameters values on build config Clone Fixes: QTCREATORBUG-28759 Change-Id: I8d7fa476ff487cf4bf5005f1ccfec65ffc59ed1c Reviewed-by: Reviewed-by: Christian Kandeler --- src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp | 4 ++++ src/plugins/projectexplorer/buildsettingspropertiespage.cpp | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 7c0f6227ff9..746a64050e5 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/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 67cb4806709..410449083c7 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; From 81da84ad0b9052742772a1929ded03f59e669b61 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 28 Feb 2023 09:32:50 +0100 Subject: [PATCH 11/29] Doc: Describe Build > Run Generator action That generates build files for other build systems, such as Microsoft Visual Studio and Eclipse. Task-number: QTCREATORBUG-28721 Change-Id: I980ee851293b41a9320b90458132ba035dc1f3f4 Reviewed-by: Christian Kandeler --- .../creator-projects-build-systems.qdocinc | 10 ++++++++++ 1 file changed, 10 insertions(+) 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. From 5e866bbf2ff18b006bca05dbc165e2e418cc0ab9 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 28 Feb 2023 09:48:46 +0100 Subject: [PATCH 12/29] Translations: Fix duplicate messages Amends 6bb756ba1c671cf6a5276f31140589ca9481ddd0 Change-Id: I6e5c3e7d2846ab8a49409b242a3474547380252e Reviewed-by: Reviewed-by: Alessandro Portale --- share/qtcreator/translations/qtcreator_uk.ts | 24 -------------------- 1 file changed, 24 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_uk.ts b/share/qtcreator/translations/qtcreator_uk.ts index 9b864e3efee..c50e8d22385 100644 --- a/share/qtcreator/translations/qtcreator_uk.ts +++ b/share/qtcreator/translations/qtcreator_uk.ts @@ -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. @@ -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::" для типів From cace5a57f2a372e5879e12ff0b5d5781f513969b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 25 Jan 2023 16:01:27 +0100 Subject: [PATCH 13/29] Plugins: Add documentation about testing Add information about how to write plugin tests and how to integrate unit tests. Change-Id: I13721f03c4c55a265a93f71a7c4d892f3e53a6bb Reviewed-by: Leena Miettinen --- .../examples/exampleplugin/CMakeLists.txt | 29 +++++ .../examples/exampleplugin/example.cpp | 43 ++++++++ .../examples/exampleplugin/example.h | 2 - .../examples/exampleplugin/example_global.h | 2 + .../examples/exampleplugin/examplefunctions.h | 9 ++ .../examples/exampleplugin/tst_mytest.cpp | 21 ++++ doc/qtcreatordev/src/creating-plugins.qdoc | 6 + doc/qtcreatordev/src/plugin-tests.qdoc | 103 ++++++++++++++++++ 8 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 doc/qtcreatordev/examples/exampleplugin/examplefunctions.h create mode 100644 doc/qtcreatordev/examples/exampleplugin/tst_mytest.cpp create mode 100644 doc/qtcreatordev/src/plugin-tests.qdoc 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 +*/ From 824ae57fd9b909de23b04326986e4393ec500cc5 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 27 Feb 2023 17:16:21 +0100 Subject: [PATCH 14/29] Qnx: Further delay configuration restoring For toolchains-on-device scenarios we need the devices. Change-Id: I83547b8c342c87c1c83ed432432f8d151d7e3f1d Reviewed-by: Christian Kandeler --- src/plugins/qnx/qnxplugin.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/qnx/qnxplugin.cpp b/src/plugins/qnx/qnxplugin.cpp index 25262c394fa..c6664b9f600 100644 --- a/src/plugins/qnx/qnxplugin.cpp +++ b/src/plugins/qnx/qnxplugin.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -122,8 +123,9 @@ private: void QnxPlugin::extensionsInitialized() { - // Can't do in init as not all devices are around. - d->configurationManager.restoreConfigurations(); + // 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); From d7c5f1c6b85d3201756ce81ee3ee15a8015b428f Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 23 Feb 2023 23:44:57 +0200 Subject: [PATCH 15/29] VCS: Fix bad wrapping on Linux Workaround QTBUG-111466. Fixes: QTCREATORBUG-25491 Change-Id: I6576f918f141b03c5dbb2926ea1123299493c195 Reviewed-by: hjk --- src/plugins/vcsbase/submiteditorwidget.cpp | 1 + 1 file changed, 1 insertion(+) 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()); From 3425a2b3d1f0f41504a0c7a482b89ab8a0934c5a Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 28 Feb 2023 15:33:30 +0100 Subject: [PATCH 16/29] Doc: Describe building on remote Linux and Docker devices Task-number: QTCREATORBUG-28721 Change-Id: I6e6bcea61b04cebfb16a462ebd99a7a97926b7a5 Reviewed-by: Marcus Tillmanns Reviewed-by: Eike Ziller --- .../creator-projects-settings-build.qdoc | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 From 205a900f9faf0c8530d6b5d618df4521a7c6ba69 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 27 Feb 2023 17:03:20 +0100 Subject: [PATCH 17/29] qtcreatorcdbext: python deployment for arm64 Use dumpbin to extract the symbols from the host dll. Use lib to create an arm64 library to link the qtcreatorcdbext.dll arm64 shared library. Use the PythonTargetArchDll CMake or environment variable to install the target arm64 python.dll If PythonTargetArchDll is not configured the script will download the python-embed-arm64.zip, extract and set PythonTargetArchDll Task-number: QTCREATORBUG-25859 Change-Id: I09320bb758fded546f203c905b75485d7de3b94e Reviewed-by: Qt CI Bot Reviewed-by: David Schulz --- src/libs/qtcreatorcdbext/CMakeLists.txt | 73 ++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) 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}" From 8288a4c5636dd333c19b33f40b512a83cc140b9e Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 27 Feb 2023 12:06:05 +0100 Subject: [PATCH 18/29] Debugger: fix dumper for QVariant containing a QList ...for Qt 6.5. Found by dumper tests. Change-Id: Ibb9ccf72a5f18e203e37123f1fc5458142bd4efc Reviewed-by: Christian Stenger --- share/qtcreator/debugger/qttypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 031addb8530..1e29486449a 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 From fb8182ca7c81b5f690929e3194f9d0bb82db7bb5 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 27 Feb 2023 14:33:57 +0100 Subject: [PATCH 19/29] Debugger: fix QJSValue dumper for Qt >= 6.5 and disable the QV4::Value dumper for that version. Change-Id: I31a0ddba2bdab3b196e4fc5298fd8e7c10f9dc92 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/qttypes.py | 97 ++++++++++++++++++++--------- tests/auto/debugger/tst_dumpers.cpp | 2 +- 2 files changed, 69 insertions(+), 30 deletions(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 1e29486449a..2cdf900d78e 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -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/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index c1d86644867..ea73440de85 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -7910,7 +7910,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)") From f9d0c1a067ef6d8c2ae07ca08746f8f22d31ba3b Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 28 Feb 2023 12:17:52 +0200 Subject: [PATCH 20/29] GDB: Adapt to message change on 13.1 Sample message: >&"Error while mapping shared library sections:\n" >&"`C:\\WINDOWS\\System32\\wow64cpu.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.\n" >=library-loaded,id="C:\\WINDOWS\\System32\\wow64cpu.dll",target-name="C:\\WINDOWS\\System32\\wow64cpu.dll",host-name="C:\\WINDOWS\\System32\\wow64cpu.dll",symbols-loaded="0",thread-group="i1",ranges=[{}] Library C:\WINDOWS\System32\wow64cpu.dll loaded. Change-Id: Icb4243b129faac581f37d3fdd1211448656abefe Reviewed-by: hjk Reviewed-by: David Schulz --- src/plugins/debugger/gdb/gdbengine.cpp | 8 +++++++- src/plugins/debugger/gdb/gdbengine.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) 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 ////////// From f3cbd506ddbcdadcea8dd3de153059f32a72f3cb Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 27 Feb 2023 15:56:50 +0100 Subject: [PATCH 21/29] Debugger: Avoid looking up qt symbols globally to get the qt namespace This can get very expensive for targets that have a lot or big modules, but are not linked against Qt. On the downside we might not be able to identify Qt namespaces in static builds. Task-number: QTCREATORBUG-18287 Change-Id: I90e0c4afcde17fd81d49017e828ce59f0abe9b5c Reviewed-by: hjk Reviewed-by: Christian Stenger --- share/qtcreator/debugger/cdbbridge.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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): From ca030b5a9af68e45a0d3cbbd50807a663ef6017c Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 25 May 2022 10:51:44 +0200 Subject: [PATCH 22/29] Squish: Fix windows toolchain for VS15 Similar to what has been done for fixing VS2017. But VS2015 also needs to add a matching Windows Kit tools path. This magically happens if the kit is set up manually, but as we provide a stripped version of toolchains and kits we need to adjust the kit environment manually. Change-Id: I9a88e7424acf2768774f5ef580ef6d1fa73bcb5a Reviewed-by: David Schulz --- .../windows/QtProject/qtcreator/profiles.xml | 4 ++- .../QtProject/qtcreator/toolchains.xml | 22 +++++++++--- tests/system/shared/qtcreator.py | 34 ++++++++++++++++--- 3 files changed, 50 insertions(+), 10 deletions(-) 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] From 369753acbc0aca71156eecd8c40ca2a9825986a3 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 28 Feb 2023 09:15:40 +0100 Subject: [PATCH 23/29] AutoTest: Redo results filtering Instead of performing costly computations keep track of the currently present types in the respective branch of the subtree. This also makes the filter invalidation on newly added items obsolete. Fixes: QTCREATORBUG-28831 Change-Id: I12cd31dc95b4c310a04ced2c98de3d509032482c Reviewed-by: David Schulz --- src/plugins/autotest/testresultmodel.cpp | 59 ++++++++++++------------ src/plugins/autotest/testresultmodel.h | 5 +- src/plugins/autotest/testresultspane.cpp | 1 + 3 files changed, 35 insertions(+), 30 deletions(-) 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); From 14241117341f19aed51a424b02a35eb62478fd2a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 22 Feb 2023 06:31:39 +0100 Subject: [PATCH 24/29] Debugger: add QPointer Dumper tests for inherited classes Change-Id: I6a25059d4c3fcd995088f90f7b11cf87a56a9a16 Reviewed-by: Qt CI Bot Reviewed-by: Christian Stenger --- tests/auto/debugger/tst_dumpers.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index ea73440de85..821e5bca82e 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -3472,18 +3472,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") From 628babb5cb2c9170946b9f0de6c16005f7e39fa7 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 28 Feb 2023 14:04:54 +0100 Subject: [PATCH 25/29] CppEditor: Adapt to new LLVM directory layout Since https://reviews.llvm.org/D125860, the path contains only the major version. We try both variants anyway, as we cannot be sure all Linux distributions will adopt this scheme. Change-Id: I0bc7b0cf38d7cb4af61342477a6a1f0679095d30 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/cppeditor/cppcodemodelsettings.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index e4b567b7326..e0873427f79 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -363,11 +363,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 {}; From 00502c46300af705ce7fc80846fc62db1f8cb97b Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 28 Feb 2023 17:55:59 +0100 Subject: [PATCH 26/29] Core: Use "patch" from git on Windows On my system where I have strawberry perl installed, the "patch.exe" from strawberry perl is picked. This patch.exe has issues while reverting chunks, where as git's patch.exe works perfectly. Change-Id: I7e8c8f91f0f841c128ff8538dba68bee161a5f7b Reviewed-by: Orgad Shaneh Reviewed-by: Qt CI Bot --- src/plugins/coreplugin/patchtool.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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; } From bcfaddb473c5753eaab60f54a270a00f1d755cf0 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 2 Mar 2023 08:03:13 +0100 Subject: [PATCH 27/29] Debugger: Remove 'UndefinedStaticMember' test Compilers are getting increasingly better in optimizing this stuff out, it's difficult and rather unnecessary to keep track of all variations. Change-Id: I9e05d5afadc4d875dc3b61e61364cf085a825239 Reviewed-by: David Schulz --- tests/auto/debugger/tst_dumpers.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 821e5bca82e..3f2f66116f6 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -8119,17 +8119,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("", From 6dc4160a404db2e0e4ec2a44168875ec60dd4067 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 28 Feb 2023 09:02:43 +0100 Subject: [PATCH 28/29] Debugger: Add warning if cdb prevents loading of cdbext This happens from time to time, but I do not have a way to reproduce it safely. In order to present the user a somewhat usable state after this error cancel the debug run and show a message box with potential fixes. Fixes: QTCREATORBUG-24323 Change-Id: I7e557001bd5dfb3b0abb19fa635bf2d20bb3b16c Reviewed-by: Christian Stenger --- src/plugins/debugger/cdb/cdbengine.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 0ecdbf8d1a5..5c5d8b1e74b 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -2279,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" From 00c79cc1b7fa1040be34e8fd58cc1090828f4b4b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 28 Feb 2023 10:09:12 +0100 Subject: [PATCH 29/29] Build: Simplify documentation target creation We don't have to rely on qdoc being located alongside qmake anymore, because nowadays Qt defines a Qt::doc target with IMPORTED_LOCATION set, so we can use that directly. Change-Id: I450578e711e0835e00320251dcadc78c1f02ab7d Reviewed-by: Cristian Adam Reviewed-by: Qt CI Bot Reviewed-by: --- cmake/QtCreatorDocumentation.cmake | 34 +++++++----------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/cmake/QtCreatorDocumentation.cmake b/cmake/QtCreatorDocumentation.cmake index 0dbd46f47a0..bc18f798289 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()