Commit 727b8c3c authored by Friedemann Kleint's avatar Friedemann Kleint
Browse files

Debugger: Use Symbol server nagging code in both CDB engines.

parent abd7ab2c
......@@ -352,42 +352,6 @@ void CdbEnginePrivate::checkVersion()
}
}
void CdbEngine::startupChecks()
{
// Check symbol server unless the user has an external/internal setup
if (!qgetenv("_NT_SYMBOL_PATH").isEmpty()
|| CdbOptions::indexOfSymbolServerPath(m_d->m_options->symbolPaths) != -1)
return;
// Prompt to use Symbol server unless the user checked "No nagging".
Core::ICore *core = Core::ICore::instance();
const QString nagSymbolServerKey = CdbOptions::settingsGroup() + QLatin1String("/NoPromptSymbolServer");
bool noFurtherNagging = core->settings()->value(nagSymbolServerKey, false).toBool();
if (noFurtherNagging)
return;
const QString symServUrl = QLatin1String("http://support.microsoft.com/kb/311503");
const QString msg = tr("<html><head/><body><p>The debugger is not configured to use the public "
"<a href=\"%1\">Microsoft Symbol Server</a>. This is recommended "
"for retrieval of the symbols of the operating system libraries.</p>"
"<p><i>Note:</i> A fast internet connection is required for this to work smoothly. Also, a delay "
"might occur when connecting for the first time.</p>"
"<p>Would you like to set it up?</p></br>"
"</body></html>").arg(symServUrl);
const QDialogButtonBox::StandardButton answer =
Utils::CheckableMessageBox::question(core->mainWindow(), tr("Symbol Server"), msg,
tr("Do not ask again"), &noFurtherNagging);
core->settings()->setValue(nagSymbolServerKey, noFurtherNagging);
if (answer == QDialogButtonBox::No)
return;
// Prompt for path and add it. Synchronize QSetting and debugger.
const QString cacheDir = CdbSymbolPathListEditor::promptCacheDirectory(core->mainWindow());
if (cacheDir.isEmpty())
return;
m_d->m_options->symbolPaths.push_back(CdbOptions::symbolServerPath(cacheDir));
m_d->m_options->toSettings(core->settings());
syncDebuggerPaths();
}
void CdbEngine::setupEngine()
{
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
......@@ -395,7 +359,12 @@ void CdbEngine::setupEngine()
if (debugCDBExecution)
qDebug("setupEngine");
CdbCore::BreakPoint::clearNormalizeFileNameCache();
startupChecks();
// Nag to add symbol server
if (CdbSymbolPathListEditor::promptToAddSymbolServer(CdbOptions::settingsGroup(),
&(m_d->m_options->symbolPaths))) {
m_d->m_options->toSettings(Core::ICore::instance()->settings());
syncDebuggerPaths();
}
m_d->checkVersion();
if (m_d->m_hDebuggeeProcess) {
warning(QLatin1String("Internal error: Attempt to start debugger while another process is being debugged."));
......
......@@ -109,7 +109,6 @@ private slots:
void warning(const QString &w);
private:
void startupChecks();
inline bool startAttachDebugger(qint64 pid, DebuggerStartMode sm, QString *errorMessage);
void processTerminated(unsigned long exitCode);
void evaluateWatcher(WatchData *wd);
......
......@@ -44,6 +44,9 @@
#include "cdbparsehelpers.h"
#include "watchutils.h"
#include "gdb/gdbmi.h"
#include "shared/cdbsymbolpathlisteditor.h"
#include <coreplugin/icore.h>
#include <utils/winutils.h>
#include <utils/qtcassert.h>
......@@ -316,6 +319,11 @@ void CdbEngine::setToolTipExpression(const QPoint &mousePos, TextEditor::ITextEd
void CdbEngine::setupEngine()
{
// Nag to add symbol server
if (Debugger::Internal::CdbSymbolPathListEditor::promptToAddSymbolServer(CdbOptions::settingsGroup(),
&(m_options->symbolPaths)))
m_options->toSettings(Core::ICore::instance()->settings());
QString errorMessage;
if (!doSetupEngine(&errorMessage)) { // Start engine which will run until initial breakpoint
showMessage(errorMessage, LogError);
......
......@@ -29,7 +29,10 @@
#include "cdbsymbolpathlisteditor.h"
#include <coreplugin/icore.h>
#include <utils/pathchooser.h>
#include <utils/checkablemessagebox.h>
#include <QtCore/QDir>
#include <QtCore/QDebug>
......@@ -39,6 +42,7 @@
#include <QtGui/QVBoxLayout>
#include <QtGui/QFormLayout>
#include <QtGui/QMessageBox>
#include <QtGui/QMainWindow>
namespace Debugger {
namespace Internal {
......@@ -163,5 +167,41 @@ int CdbSymbolPathListEditor::indexOfSymbolServerPath(const QStringList &paths, Q
return -1;
}
bool CdbSymbolPathListEditor::promptToAddSymbolServer(const QString &settingsGroup, QStringList *symbolPaths)
{
// Check symbol server unless the user has an external/internal setup
if (!qgetenv("_NT_SYMBOL_PATH").isEmpty()
|| CdbSymbolPathListEditor::indexOfSymbolServerPath(*symbolPaths) != -1)
return false;
// Prompt to use Symbol server unless the user checked "No nagging".
Core::ICore *core = Core::ICore::instance();
const QString nagSymbolServerKey = settingsGroup + QLatin1String("/NoPromptSymbolServer");
bool noFurtherNagging = core->settings()->value(nagSymbolServerKey, false).toBool();
if (noFurtherNagging)
return false;
const QString symServUrl = QLatin1String("http://support.microsoft.com/kb/311503");
const QString msg = tr("<html><head/><body><p>The debugger is not configured to use the public "
"<a href=\"%1\">Microsoft Symbol Server</a>. This is recommended "
"for retrieval of the symbols of the operating system libraries.</p>"
"<p><i>Note:</i> A fast internet connection is required for this to work smoothly. Also, a delay "
"might occur when connecting for the first time.</p>"
"<p>Would you like to set it up?</p></br>"
"</body></html>").arg(symServUrl);
const QDialogButtonBox::StandardButton answer =
Utils::CheckableMessageBox::question(core->mainWindow(), tr("Symbol Server"), msg,
tr("Do not ask again"), &noFurtherNagging);
core->settings()->setValue(nagSymbolServerKey, noFurtherNagging);
if (answer == QDialogButtonBox::No)
return false;
// Prompt for path and add it. Synchronize QSetting and debugger.
const QString cacheDir = CdbSymbolPathListEditor::promptCacheDirectory(core->mainWindow());
if (cacheDir.isEmpty())
return false;
symbolPaths->push_back(CdbSymbolPathListEditor::symbolServerPath(cacheDir));
return true;
}
} // namespace Internal
} // namespace Debugger
......@@ -86,6 +86,9 @@ public:
// Check for symbol server in list of paths.
static int indexOfSymbolServerPath(const QStringList &paths, QString *cacheDir = 0);
// Nag user to add a symbol server to the path list on debugger startup.
static bool promptToAddSymbolServer(const QString &settingsGroup, QStringList *symbolPaths);
private slots:
void addSymbolServer();
};
......
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