Debugger: reenable 32 bit cdb detection

The 64 bit cdb has unfortunately limited 32 bit debugging capabilities and there are
still a bunch of users that still need to work with 32 bit MSVC builds. Also add
functionality to reset the 64 bit cdb in kits with a 32 bit toolchain.

This reverts commit 9a06e1f65c.
This reverts commit 421210e609.

Task-number: QTCREATORBUG-31345
Change-Id: I072353b8ab6a2b93594dd4f11ecd17ca031ab6ec
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2024-08-23 09:13:20 +02:00
parent cd198388b7
commit 2d7a07e9dd
3 changed files with 18 additions and 16 deletions

View File

@@ -434,11 +434,8 @@ static DebuggerItem::MatchLevel matchSingle(const Abi &debuggerAbi, const Abi &t
return matchOnMultiarch; return matchOnMultiarch;
} }
if (debuggerAbi.wordWidth() == 64 && targetAbi.wordWidth() == 32) { if (debuggerAbi.wordWidth() == 64 && targetAbi.wordWidth() == 32)
return HostOsInfo::isWindowsHost() && engineType == CdbEngineType return DebuggerItem::MatchesSomewhat;
? DebuggerItem::MatchesPerfectly
: DebuggerItem::MatchesSomewhat;
}
if (debuggerAbi.wordWidth() != 0 && debuggerAbi.wordWidth() != targetAbi.wordWidth()) if (debuggerAbi.wordWidth() != 0 && debuggerAbi.wordWidth() != targetAbi.wordWidth())
return matchOnMultiarch; return matchOnMultiarch;

View File

@@ -549,7 +549,7 @@ void DebuggerItemModel::autoDetectCdbDebuggers()
for (const QFileInfo &kitFolderFi : kitFolders) { for (const QFileInfo &kitFolderFi : kitFolders) {
const QString path = kitFolderFi.absoluteFilePath(); const QString path = kitFolderFi.absoluteFilePath();
QStringList abis = {"x64"}; QStringList abis = {"x86", "x64"};
if (HostOsInfo::hostArchitecture() == Utils::OsArchArm64) if (HostOsInfo::hostArchitecture() == Utils::OsArchArm64)
abis << "arm64"; abis << "arm64";
for (const QString &abi: abis) { for (const QString &abi: abis) {
@@ -783,12 +783,6 @@ void DebuggerItemModel::readDebuggers(const FilePath &fileName, bool isSystem)
.arg(item.command().toUserOutput(), item.id().toString(), fileName.toUserOutput()); .arg(item.command().toUserOutput(), item.id().toString(), fileName.toUserOutput());
continue; continue;
} }
if (item.engineType() == CdbEngineType
&& Abi::abisOfBinary(item.command()).value(0).wordWidth() == 32) {
qWarning() << QString("32 bit CDB \"%1\" (%2) read from \"%3\" dropped since it is not supported anymore.")
.arg(item.command().toUserOutput(), item.id().toString(), fileName.toUserOutput());
continue;
}
// FIXME: During startup, devices are not yet available, so we cannot check if the file still exists. // FIXME: During startup, devices are not yet available, so we cannot check if the file still exists.
if (!item.command().needsDevice() && !item.command().isExecutableFile()) { if (!item.command().needsDevice() && !item.command().isExecutableFile()) {
qWarning() << QString("DebuggerItem \"%1\" (%2) read from \"%3\" dropped since the command is not executable.") qWarning() << QString("DebuggerItem \"%1\" (%2) read from \"%3\" dropped since the command is not executable.")

View File

@@ -391,10 +391,21 @@ public:
void fix(Kit *k) override void fix(Kit *k) override
{ {
const QVariant id = k->value(DebuggerKitAspect::id()); const QVariant id = k->value(DebuggerKitAspect::id());
if (Utils::anyOf(DebuggerItemManager::debuggers(), Utils::equal(&DebuggerItem::id, id))) const DebuggerItem debugger = Utils::findOrDefault(
return; DebuggerItemManager::debuggers(), Utils::equal(&DebuggerItem::id, id));
k->removeKeySilently(DebuggerKitAspect::id()); if (debugger.isValid() && debugger.engineType() == CdbEngineType) {
setup(k); const int tcWordWidth = ToolchainKitAspect::targetAbi(k).wordWidth();
if (Utils::anyOf(debugger.abis(), Utils::equal(&Abi::wordWidth, tcWordWidth)))
return;
for (const DebuggerItem &item : DebuggerItemManager::debuggers()) {
if (item.engineType() == CdbEngineType
&& Utils::anyOf(item.abis(), Utils::equal(&Abi::wordWidth, tcWordWidth))) {
k->setValue(DebuggerKitAspect::id(), item.id());
return;
}
}
}
} }
KitAspect *createKitAspect(Kit *k) const override KitAspect *createKitAspect(Kit *k) const override