forked from qt-creator/qt-creator
Fixes: debugger: make shutdown a bit more robust
This commit is contained in:
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
#include "debuggermanager.h"
|
#include "debuggermanager.h"
|
||||||
|
|
||||||
#include "assert.h"
|
|
||||||
#include "debuggerconstants.h"
|
#include "debuggerconstants.h"
|
||||||
#include "idebuggerengine.h"
|
#include "idebuggerengine.h"
|
||||||
|
|
||||||
@@ -58,6 +57,8 @@
|
|||||||
#include "startexternaldialog.h"
|
#include "startexternaldialog.h"
|
||||||
#include "attachexternaldialog.h"
|
#include "attachexternaldialog.h"
|
||||||
|
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
#include <QtCore/QDir>
|
#include <QtCore/QDir>
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
@@ -149,6 +150,7 @@ void DebuggerManager::init()
|
|||||||
{
|
{
|
||||||
m_status = -1;
|
m_status = -1;
|
||||||
m_busy = false;
|
m_busy = false;
|
||||||
|
m_shutdown = false;
|
||||||
|
|
||||||
m_attachedPID = 0;
|
m_attachedPID = 0;
|
||||||
m_startMode = startInternal;
|
m_startMode = startInternal;
|
||||||
@@ -588,7 +590,18 @@ void DebuggerManager::showApplicationOutput(const QString &str)
|
|||||||
void DebuggerManager::shutdown()
|
void DebuggerManager::shutdown()
|
||||||
{
|
{
|
||||||
//qDebug() << "DEBUGGER_MANAGER SHUTDOWN START";
|
//qDebug() << "DEBUGGER_MANAGER SHUTDOWN START";
|
||||||
engine()->shutdown();
|
m_shutdown = true;
|
||||||
|
if (m_engine)
|
||||||
|
m_engine->shutdown();
|
||||||
|
m_engine = 0;
|
||||||
|
|
||||||
|
delete scriptEngine;
|
||||||
|
scriptEngine = 0;
|
||||||
|
delete gdbEngine;
|
||||||
|
gdbEngine = 0;
|
||||||
|
delete winEngine;
|
||||||
|
winEngine = 0;
|
||||||
|
|
||||||
// Delete these manually before deleting the manager
|
// Delete these manually before deleting the manager
|
||||||
// (who will delete the models for most views)
|
// (who will delete the models for most views)
|
||||||
delete m_breakWindow;
|
delete m_breakWindow;
|
||||||
@@ -642,41 +655,49 @@ void DebuggerManager::toggleBreakpoint()
|
|||||||
|
|
||||||
void DebuggerManager::toggleBreakpoint(const QString &fileName, int lineNumber)
|
void DebuggerManager::toggleBreakpoint(const QString &fileName, int lineNumber)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
|
QTC_ASSERT(m_breakHandler, return);
|
||||||
int index = m_breakHandler->indexOf(fileName, lineNumber);
|
int index = m_breakHandler->indexOf(fileName, lineNumber);
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
breakHandler()->setBreakpoint(fileName, lineNumber);
|
m_breakHandler->setBreakpoint(fileName, lineNumber);
|
||||||
else
|
else
|
||||||
breakHandler()->removeBreakpoint(index);
|
m_breakHandler->removeBreakpoint(index);
|
||||||
engine()->attemptBreakpointSynchronization();
|
m_engine->attemptBreakpointSynchronization();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::setToolTipExpression(const QPoint &pos, const QString &exp)
|
void DebuggerManager::setToolTipExpression(const QPoint &pos, const QString &exp)
|
||||||
{
|
{
|
||||||
engine()->setToolTipExpression(pos, exp);
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->setToolTipExpression(pos, exp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::updateWatchModel()
|
void DebuggerManager::updateWatchModel()
|
||||||
{
|
{
|
||||||
engine()->updateWatchModel();
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->updateWatchModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::expandChildren(const QModelIndex &idx)
|
void DebuggerManager::expandChildren(const QModelIndex &idx)
|
||||||
{
|
{
|
||||||
watchHandler()->expandChildren(idx);
|
QTC_ASSERT(m_watchHandler, return);
|
||||||
|
m_watchHandler->expandChildren(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::collapseChildren(const QModelIndex &idx)
|
void DebuggerManager::collapseChildren(const QModelIndex &idx)
|
||||||
{
|
{
|
||||||
watchHandler()->collapseChildren(idx);
|
QTC_ASSERT(m_watchHandler, return);
|
||||||
|
m_watchHandler->collapseChildren(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::removeWatchExpression(const QString &exp)
|
void DebuggerManager::removeWatchExpression(const QString &exp)
|
||||||
{
|
{
|
||||||
watchHandler()->removeWatchExpression(exp);
|
QTC_ASSERT(m_watchHandler, return);
|
||||||
|
m_watchHandler->removeWatchExpression(exp);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant DebuggerManager::sessionValue(const QString &name)
|
QVariant DebuggerManager::sessionValue(const QString &name)
|
||||||
{
|
{
|
||||||
|
// this is answered by the plugin
|
||||||
QVariant value;
|
QVariant value;
|
||||||
emit sessionValueRequested(name, &value);
|
emit sessionValueRequested(name, &value);
|
||||||
return value;
|
return value;
|
||||||
@@ -684,16 +705,19 @@ QVariant DebuggerManager::sessionValue(const QString &name)
|
|||||||
|
|
||||||
void DebuggerManager::querySessionValue(const QString &name, QVariant *value)
|
void DebuggerManager::querySessionValue(const QString &name, QVariant *value)
|
||||||
{
|
{
|
||||||
|
// this is answered by the plugin
|
||||||
emit sessionValueRequested(name, value);
|
emit sessionValueRequested(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::setSessionValue(const QString &name, const QVariant &value)
|
void DebuggerManager::setSessionValue(const QString &name, const QVariant &value)
|
||||||
{
|
{
|
||||||
|
// this is answered by the plugin
|
||||||
emit setSessionValueRequested(name, value);
|
emit setSessionValueRequested(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant DebuggerManager::configValue(const QString &name)
|
QVariant DebuggerManager::configValue(const QString &name)
|
||||||
{
|
{
|
||||||
|
// this is answered by the plugin
|
||||||
QVariant value;
|
QVariant value;
|
||||||
emit configValueRequested(name, &value);
|
emit configValueRequested(name, &value);
|
||||||
return value;
|
return value;
|
||||||
@@ -701,11 +725,13 @@ QVariant DebuggerManager::configValue(const QString &name)
|
|||||||
|
|
||||||
void DebuggerManager::queryConfigValue(const QString &name, QVariant *value)
|
void DebuggerManager::queryConfigValue(const QString &name, QVariant *value)
|
||||||
{
|
{
|
||||||
|
// this is answered by the plugin
|
||||||
emit configValueRequested(name, value);
|
emit configValueRequested(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::setConfigValue(const QString &name, const QVariant &value)
|
void DebuggerManager::setConfigValue(const QString &name, const QVariant &value)
|
||||||
{
|
{
|
||||||
|
// this is answered by the plugin
|
||||||
emit setConfigValueRequested(name, value);
|
emit setConfigValueRequested(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -788,7 +814,7 @@ bool DebuggerManager::startNewDebugger(StartMode mode)
|
|||||||
else
|
else
|
||||||
setDebuggerType(GdbDebugger);
|
setDebuggerType(GdbDebugger);
|
||||||
|
|
||||||
if (!engine()->startDebugger())
|
if (!m_engine->startDebugger())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_busy = false;
|
m_busy = false;
|
||||||
@@ -809,7 +835,10 @@ void DebuggerManager::cleanupViews()
|
|||||||
|
|
||||||
void DebuggerManager::exitDebugger()
|
void DebuggerManager::exitDebugger()
|
||||||
{
|
{
|
||||||
engine()->exitDebugger();
|
if (m_shutdown)
|
||||||
|
return;
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->exitDebugger();
|
||||||
cleanupViews();
|
cleanupViews();
|
||||||
setStatus(DebuggerProcessNotReady);
|
setStatus(DebuggerProcessNotReady);
|
||||||
setBusyCursor(false);
|
setBusyCursor(false);
|
||||||
@@ -818,62 +847,73 @@ void DebuggerManager::exitDebugger()
|
|||||||
|
|
||||||
void DebuggerManager::assignValueInDebugger(const QString &expr, const QString &value)
|
void DebuggerManager::assignValueInDebugger(const QString &expr, const QString &value)
|
||||||
{
|
{
|
||||||
engine()->assignValueInDebugger(expr, value);
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->assignValueInDebugger(expr, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::activateFrame(int index)
|
void DebuggerManager::activateFrame(int index)
|
||||||
{
|
{
|
||||||
engine()->activateFrame(index);
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->activateFrame(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::selectThread(int index)
|
void DebuggerManager::selectThread(int index)
|
||||||
{
|
{
|
||||||
engine()->selectThread(index);
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->selectThread(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::loadAllSymbols()
|
void DebuggerManager::loadAllSymbols()
|
||||||
{
|
{
|
||||||
engine()->loadAllSymbols();
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->loadAllSymbols();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::loadSymbols(const QString &module)
|
void DebuggerManager::loadSymbols(const QString &module)
|
||||||
{
|
{
|
||||||
engine()->loadSymbols(module);
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->loadSymbols(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::stepExec()
|
void DebuggerManager::stepExec()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
resetLocation();
|
resetLocation();
|
||||||
engine()->stepExec();
|
m_engine->stepExec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::stepOutExec()
|
void DebuggerManager::stepOutExec()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
resetLocation();
|
resetLocation();
|
||||||
engine()->stepOutExec();
|
m_engine->stepOutExec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::nextExec()
|
void DebuggerManager::nextExec()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
resetLocation();
|
resetLocation();
|
||||||
engine()->nextExec();
|
m_engine->nextExec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::stepIExec()
|
void DebuggerManager::stepIExec()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
resetLocation();
|
resetLocation();
|
||||||
engine()->stepIExec();
|
m_engine->stepIExec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::nextIExec()
|
void DebuggerManager::nextIExec()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
resetLocation();
|
resetLocation();
|
||||||
engine()->nextIExec();
|
m_engine->nextIExec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::executeDebuggerCommand(const QString &command)
|
void DebuggerManager::executeDebuggerCommand(const QString &command)
|
||||||
{
|
{
|
||||||
engine()->executeDebuggerCommand(command);
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_engine->executeDebuggerCommand(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::sessionLoaded()
|
void DebuggerManager::sessionLoaded()
|
||||||
@@ -891,16 +931,18 @@ void DebuggerManager::aboutToSaveSession()
|
|||||||
|
|
||||||
void DebuggerManager::loadSessionData()
|
void DebuggerManager::loadSessionData()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
m_breakHandler->loadSessionData();
|
m_breakHandler->loadSessionData();
|
||||||
m_watchHandler->loadSessionData();
|
m_watchHandler->loadSessionData();
|
||||||
engine()->loadSessionData();
|
m_engine->loadSessionData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::saveSessionData()
|
void DebuggerManager::saveSessionData()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
m_breakHandler->saveSessionData();
|
m_breakHandler->saveSessionData();
|
||||||
m_watchHandler->saveSessionData();
|
m_watchHandler->saveSessionData();
|
||||||
engine()->saveSessionData();
|
m_engine->saveSessionData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::dumpLog()
|
void DebuggerManager::dumpLog()
|
||||||
@@ -959,19 +1001,24 @@ void DebuggerManager::addToWatchWindow()
|
|||||||
|
|
||||||
void DebuggerManager::watchExpression(const QString &expression)
|
void DebuggerManager::watchExpression(const QString &expression)
|
||||||
{
|
{
|
||||||
watchHandler()->watchExpression(expression);
|
QTC_ASSERT(m_watchHandler, return);
|
||||||
|
m_watchHandler->watchExpression(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::setBreakpoint(const QString &fileName, int lineNumber)
|
void DebuggerManager::setBreakpoint(const QString &fileName, int lineNumber)
|
||||||
{
|
{
|
||||||
breakHandler()->setBreakpoint(fileName, lineNumber);
|
QTC_ASSERT(m_breakHandler, return);
|
||||||
engine()->attemptBreakpointSynchronization();
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_breakHandler->setBreakpoint(fileName, lineNumber);
|
||||||
|
m_engine->attemptBreakpointSynchronization();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::breakByFunction(const QString &functionName)
|
void DebuggerManager::breakByFunction(const QString &functionName)
|
||||||
{
|
{
|
||||||
breakHandler()->breakByFunction(functionName);
|
QTC_ASSERT(m_breakHandler, return);
|
||||||
engine()->attemptBreakpointSynchronization();
|
QTC_ASSERT(m_engine, return);
|
||||||
|
m_breakHandler->breakByFunction(functionName);
|
||||||
|
m_engine->attemptBreakpointSynchronization();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::breakByFunction()
|
void DebuggerManager::breakByFunction()
|
||||||
@@ -1081,14 +1128,16 @@ bool DebuggerManager::useCustomDumpers() const
|
|||||||
|
|
||||||
void DebuggerManager::setUseCustomDumpers(bool on)
|
void DebuggerManager::setUseCustomDumpers(bool on)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
m_settings.m_useCustomDumpers = on;
|
m_settings.m_useCustomDumpers = on;
|
||||||
engine()->setUseCustomDumpers(on);
|
m_engine->setUseCustomDumpers(on);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::setDebugDumpers(bool on)
|
void DebuggerManager::setDebugDumpers(bool on)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
m_settings.m_debugDumpers = on;
|
m_settings.m_debugDumpers = on;
|
||||||
engine()->setDebugDumpers(on);
|
m_engine->setDebugDumpers(on);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::setSkipKnownFrames(bool on)
|
void DebuggerManager::setSkipKnownFrames(bool on)
|
||||||
@@ -1104,29 +1153,31 @@ void DebuggerManager::queryCurrentTextEditor(QString *fileName, int *lineNumber,
|
|||||||
|
|
||||||
void DebuggerManager::continueExec()
|
void DebuggerManager::continueExec()
|
||||||
{
|
{
|
||||||
engine()->continueInferior();
|
m_engine->continueInferior();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::interruptDebuggingRequest()
|
void DebuggerManager::interruptDebuggingRequest()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
//qDebug() << "INTERRUPTING AT" << status();
|
//qDebug() << "INTERRUPTING AT" << status();
|
||||||
bool interruptIsExit = (status() != DebuggerInferiorRunning);
|
bool interruptIsExit = (status() != DebuggerInferiorRunning);
|
||||||
if (interruptIsExit)
|
if (interruptIsExit)
|
||||||
exitDebugger();
|
exitDebugger();
|
||||||
else {
|
else {
|
||||||
setStatus(DebuggerInferiorStopRequested);
|
setStatus(DebuggerInferiorStopRequested);
|
||||||
engine()->interruptInferior();
|
m_engine->interruptInferior();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DebuggerManager::runToLineExec()
|
void DebuggerManager::runToLineExec()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
QString fileName;
|
QString fileName;
|
||||||
int lineNumber = -1;
|
int lineNumber = -1;
|
||||||
emit currentTextEditorRequested(&fileName, &lineNumber, 0);
|
emit currentTextEditorRequested(&fileName, &lineNumber, 0);
|
||||||
if (!fileName.isEmpty())
|
if (!fileName.isEmpty())
|
||||||
engine()->runToLineExec(fileName, lineNumber);
|
m_engine->runToLineExec(fileName, lineNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::runToFunctionExec()
|
void DebuggerManager::runToFunctionExec()
|
||||||
@@ -1158,7 +1209,7 @@ void DebuggerManager::runToFunctionExec()
|
|||||||
}
|
}
|
||||||
//qDebug() << "RUN TO FUNCTION " << functionName;
|
//qDebug() << "RUN TO FUNCTION " << functionName;
|
||||||
if (!functionName.isEmpty())
|
if (!functionName.isEmpty())
|
||||||
engine()->runToFunctionExec(functionName);
|
m_engine->runToFunctionExec(functionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::jumpToLineExec()
|
void DebuggerManager::jumpToLineExec()
|
||||||
@@ -1167,20 +1218,20 @@ void DebuggerManager::jumpToLineExec()
|
|||||||
int lineNumber = -1;
|
int lineNumber = -1;
|
||||||
emit currentTextEditorRequested(&fileName, &lineNumber, 0);
|
emit currentTextEditorRequested(&fileName, &lineNumber, 0);
|
||||||
if (!fileName.isEmpty())
|
if (!fileName.isEmpty())
|
||||||
engine()->jumpToLineExec(fileName, lineNumber);
|
m_engine->jumpToLineExec(fileName, lineNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::resetLocation()
|
void DebuggerManager::resetLocation()
|
||||||
{
|
{
|
||||||
//m_watchHandler->removeMouseMoveCatcher(editor->widget());
|
// connected to the plugin
|
||||||
emit resetLocationRequested();
|
emit resetLocationRequested();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::gotoLocation(const QString &fileName, int line,
|
void DebuggerManager::gotoLocation(const QString &fileName, int line,
|
||||||
bool setMarker)
|
bool setMarker)
|
||||||
{
|
{
|
||||||
|
// connected to the plugin
|
||||||
emit gotoLocationRequested(fileName, line, setMarker);
|
emit gotoLocationRequested(fileName, line, setMarker);
|
||||||
//m_watchHandler->installMouseMoveCatcher(editor->widget());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1192,9 +1243,10 @@ void DebuggerManager::gotoLocation(const QString &fileName, int line,
|
|||||||
|
|
||||||
void DebuggerManager::reloadDisassembler()
|
void DebuggerManager::reloadDisassembler()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_engine, return);
|
||||||
if (!m_disassemblerDock || !m_disassemblerDock->isVisible())
|
if (!m_disassemblerDock || !m_disassemblerDock->isVisible())
|
||||||
return;
|
return;
|
||||||
engine()->reloadDisassembler();
|
m_engine->reloadDisassembler();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::disassemblerDockToggled(bool on)
|
void DebuggerManager::disassemblerDockToggled(bool on)
|
||||||
@@ -1214,7 +1266,7 @@ void DebuggerManager::reloadModules()
|
|||||||
{
|
{
|
||||||
if (!m_modulesDock || !m_modulesDock->isVisible())
|
if (!m_modulesDock || !m_modulesDock->isVisible())
|
||||||
return;
|
return;
|
||||||
engine()->reloadModules();
|
m_engine->reloadModules();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::modulesDockToggled(bool on)
|
void DebuggerManager::modulesDockToggled(bool on)
|
||||||
@@ -1232,11 +1284,13 @@ void DebuggerManager::modulesDockToggled(bool on)
|
|||||||
|
|
||||||
void DebuggerManager::showDebuggerOutput(const QString &prefix, const QString &msg)
|
void DebuggerManager::showDebuggerOutput(const QString &prefix, const QString &msg)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_outputWindow, return);
|
||||||
m_outputWindow->showOutput(prefix, msg);
|
m_outputWindow->showOutput(prefix, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerManager::showDebuggerInput(const QString &prefix, const QString &msg)
|
void DebuggerManager::showDebuggerInput(const QString &prefix, const QString &msg)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_outputWindow, return);
|
||||||
m_outputWindow->showInput(prefix, msg);
|
m_outputWindow->showInput(prefix, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1257,7 +1311,7 @@ void DebuggerManager::reloadRegisters()
|
|||||||
{
|
{
|
||||||
if (!m_registerDock || !m_registerDock->isVisible())
|
if (!m_registerDock || !m_registerDock->isVisible())
|
||||||
return;
|
return;
|
||||||
engine()->reloadRegisters();
|
m_engine->reloadRegisters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -466,6 +466,8 @@ private:
|
|||||||
IDebuggerEngine *engine();
|
IDebuggerEngine *engine();
|
||||||
IDebuggerEngine *m_engine;
|
IDebuggerEngine *m_engine;
|
||||||
DebuggerSettings m_settings;
|
DebuggerSettings m_settings;
|
||||||
|
// set during application shutdown
|
||||||
|
bool m_shutdown;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
Reference in New Issue
Block a user