diff --git a/src/libs/qtcreatorcdbext/CMakeLists.txt b/src/libs/qtcreatorcdbext/CMakeLists.txt index 334d226af4d..ba6508c43e0 100644 --- a/src/libs/qtcreatorcdbext/CMakeLists.txt +++ b/src/libs/qtcreatorcdbext/CMakeLists.txt @@ -20,9 +20,13 @@ endif() find_library(DbgEngLib dbgeng) -set(ArchSuffix 32) +set(ArchSuffix "32") if (CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ArchSuffix 64) + set(ArchSuffix "64") +endif() + +if (MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARM") + set(ArchSuffix "arm${ArchSuffix}") endif() add_qtc_library(qtcreatorcdbext SHARED diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index b8566b78740..b4d538485b9 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -56,6 +56,7 @@ #include #include +#include #include #include #include @@ -290,14 +291,13 @@ bool CdbEngine::canHandleToolTip(const DebuggerToolTipContext &context) const } // Determine full path to the CDB extension library. -QString CdbEngine::extensionLibraryName(bool is64Bit) +QString CdbEngine::extensionLibraryName(bool is64Bit, bool isArm) { // Determine extension lib name and path to use - QString rc; - QTextStream(&rc) << QFileInfo(QCoreApplication::applicationDirPath()).path() - << "/lib/" << (is64Bit ? QT_CREATOR_CDB_EXT "64" : QT_CREATOR_CDB_EXT "32") - << '/' << QT_CREATOR_CDB_EXT << ".dll"; - return rc; + return QString("%1/lib/" QT_CREATOR_CDB_EXT "%2%3/" QT_CREATOR_CDB_EXT ".dll") + .arg(QFileInfo(QCoreApplication::applicationDirPath()).path()) + .arg(isArm ? "arm" : QString()) + .arg(is64Bit ? "64": "32"); } int CdbEngine::elapsedLogTime() @@ -353,10 +353,17 @@ void CdbEngine::setupEngine() return; } - bool cdbIs64Bit = is64BitWindowsBinary(sp.debugger.command.executable()); - if (!cdbIs64Bit) + bool cdbIs64Bit = true; + bool cdbIsArm = false; + Abis abisOfCdb = Abi::abisOfBinary(sp.debugger.command.executable()); + if (abisOfCdb.size() == 1) { + Abi abi = abisOfCdb.at(0); + cdbIs64Bit = abi.wordWidth() == 64; + cdbIsArm = abi.architecture() == Abi::Architecture::ArmArchitecture; + } + if (!cdbIs64Bit || cdbIsArm) m_wow64State = noWow64Stack; - const QFileInfo extensionFi(CdbEngine::extensionLibraryName(cdbIs64Bit)); + const QFileInfo extensionFi(CdbEngine::extensionLibraryName(cdbIs64Bit, cdbIsArm)); if (!extensionFi.isFile()) { handleSetupFailure(tr("Internal error: The extension %1 cannot be found.\n" "If you have updated %2 via Maintenance Tool, you may " diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 4fdc5f957cd..92d434f2bc3 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -101,7 +101,7 @@ public: void loadAdditionalQmlStack() override; void listBreakpoints(); - static QString extensionLibraryName(bool is64Bit); + static QString extensionLibraryName(bool is64Bit, bool isArm = false); private: void readyReadStandardOut();