diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 00c49a16d6b..d007f3580fb 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -73,6 +73,7 @@ #include +#include #include #include #include @@ -792,12 +793,27 @@ void MemcheckTool::heobAction() const QString heob = QString("heob%1.exe").arg(abi.wordWidth()); const QString heobPath = dialog.path() + '/' + heob; if (!QFile::exists(heobPath)) { - const QString msg = tr("Heob: Can't find %1").arg(heob); - TaskHub::addTask(Task::Error, msg, Debugger::Constants::ANALYZERTASK_ID); - TaskHub::requestPopup(); + QMessageBox::critical(Core::ICore::mainWindow(), tr("Heob"), + tr("The %1 executables must be in the appropriate location.") + .arg("Heob")); return; } + // dwarfstack + if (abi.osFlavor() == Abi::WindowsMSysFlavor) { + const QString dwarfstack = QString("dwarfstack%1.dll").arg(abi.wordWidth()); + const QString dwarfstackPath = dialog.path() + '/' + dwarfstack; + if (!QFile::exists(dwarfstackPath) + && CheckableMessageBox::doNotShowAgainInformation( + Core::ICore::mainWindow(), tr("Heob"), + tr("Heob used with MinGW projects needs the %1 DLLs for proper stacktrace resolution.") + .arg("Dwarfstack"), + ICore::settings(), "HeobDwarfstackInfo", + QDialogButtonBox::Ok | QDialogButtonBox::Cancel, + QDialogButtonBox::Ok) != QDialogButtonBox::Ok) + return; + } + // output xml file QDir wdDir(workingDirectory); const QString xmlPath = wdDir.absoluteFilePath(dialog.xmlName());