forked from qt-creator/qt-creator
Debugger: Use Symbol server nagging code in both CDB engines.
This commit is contained in:
@@ -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();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user