Commit e76943eb authored by Friedemann Kleint's avatar Friedemann Kleint
Browse files

Load required dependency lib "dbghelp.dll" manually.

parent 7456e4e5
...@@ -65,6 +65,7 @@ ...@@ -65,6 +65,7 @@
#define DBGHELP_TRANSLATE_TCHAR #define DBGHELP_TRANSLATE_TCHAR
#include <inc/Dbghelp.h> #include <inc/Dbghelp.h>
static const char *dbgHelpDllC = "dbghelp";
static const char *dbgEngineDllC = "dbgeng"; static const char *dbgEngineDllC = "dbgeng";
static const char *debugCreateFuncC = "DebugCreate"; static const char *debugCreateFuncC = "DebugCreate";
...@@ -116,6 +117,12 @@ QString msgComFailed(const char *func, HRESULT hr) ...@@ -116,6 +117,12 @@ QString msgComFailed(const char *func, HRESULT hr)
static const char *msgNoStackTraceC = "Internal error: no stack trace present."; static const char *msgNoStackTraceC = "Internal error: no stack trace present.";
static inline QString msgLibLoadFailed(const QString &lib, const QString &why)
{
return CdbDebugEngine::tr("Unable to load the debugger engine library '%1': %2").
arg(lib, why);
}
// ----- Engine helpers // ----- Engine helpers
static inline ULONG getInterruptTimeOutSecs(IDebugControl4 *ctl) static inline ULONG getInterruptTimeOutSecs(IDebugControl4 *ctl)
...@@ -143,19 +150,31 @@ DebuggerEngineLibrary::DebuggerEngineLibrary() : ...@@ -143,19 +150,31 @@ DebuggerEngineLibrary::DebuggerEngineLibrary() :
{ {
} }
bool DebuggerEngineLibrary::init(const QString &path, QString *errorMessage) // Build a lib name as "Path\x.dll"
static inline QString libPath(const QString &libName, const QString &path = QString())
{ {
// Load from path QString rc = path;
QString dllPath = path; if (!rc.isEmpty())
if (!dllPath.isEmpty()) rc += QDir::separator();
dllPath += QDir::separator(); rc += libName;
dllPath += QLatin1String(dbgEngineDllC); rc += QLatin1String(".dll");
return rc;
QLibrary lib(dllPath, 0); }
bool DebuggerEngineLibrary::init(const QString &path, QString *errorMessage)
{
// Load the dependent help lib first
const QString helpLibPath = libPath(QLatin1String(dbgHelpDllC), path);
QLibrary helpLib(helpLibPath, 0);
if (!helpLib.isLoaded() && !helpLib.load()) {
*errorMessage = msgLibLoadFailed(helpLibPath, helpLib.errorString());
return false;
}
// Load dbgeng lib
const QString engineLibPath = libPath(QLatin1String(dbgEngineDllC), path);
QLibrary lib(engineLibPath, 0);
if (!lib.isLoaded() && !lib.load()) { if (!lib.isLoaded() && !lib.load()) {
*errorMessage = CdbDebugEngine::tr("Unable to load the debugger engine library '%1': %2"). *errorMessage = msgLibLoadFailed(engineLibPath, lib.errorString());
arg(QLatin1String(dbgEngineDllC), lib.errorString());
return false; return false;
} }
// Locate symbols // Locate symbols
......
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QGroupBox" name="cdbOptionsGroupBox"> <widget class="QGroupBox" name="cdbOptionsGroupBox">
<property name="toolTip">
<string>These options take effect at the next start of Qt Creator.</string>
</property>
<property name="title"> <property name="title">
<string>CDB</string> <string>CDB</string>
</property> </property>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment