Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marco Bubke
flatpak-qt-creator
Commits
8d3a774f
Commit
8d3a774f
authored
Dec 08, 2008
by
hjk
Browse files
new status widget for debugger output. needs a bit more polishing...
parent
358eceac
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/plugins/debugger/debuggermanager.cpp
View file @
8d3a774f
...
...
@@ -62,6 +62,7 @@
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
#include <QtCore/QTime>
#include <QtCore/QTimer>
#include <QtGui/QAction>
#include <QtGui/QComboBox>
...
...
@@ -145,6 +146,7 @@ void DebuggerManager::init()
m_modulesHandler
=
0
;
m_registerHandler
=
0
;
m_statusLabel
=
new
QLabel
;
m_breakWindow
=
new
BreakWindow
;
m_disassemblerWindow
=
new
DisassemblerWindow
;
m_modulesWindow
=
new
ModulesWindow
;
...
...
@@ -157,6 +159,7 @@ void DebuggerManager::init()
//m_tooltipWindow = new WatchWindow(WatchWindow::TooltipType);
//m_watchersWindow = new QTreeView;
m_tooltipWindow
=
new
QTreeView
;
m_statusTimer
=
new
QTimer
(
this
);
m_mainWindow
=
new
QMainWindow
;
m_mainWindow
->
setTabPosition
(
Qt
::
AllDockWidgetAreas
,
QTabWidget
::
North
);
...
...
@@ -408,6 +411,8 @@ void DebuggerManager::init()
this
,
SLOT
(
saveSessionData
()));
connect
(
m_dumpLogAction
,
SIGNAL
(
triggered
()),
this
,
SLOT
(
dumpLog
()));
connect
(
m_statusTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
clearStatusMessage
()));
connect
(
m_outputWindow
,
SIGNAL
(
commandExecutionRequested
(
QString
)),
this
,
SLOT
(
executeDebuggerCommand
(
QString
)));
...
...
@@ -553,24 +558,24 @@ QAbstractItemModel *DebuggerManager::threadsModel()
return
qobject_cast
<
ThreadsWindow
*>
(
m_threadsWindow
)
->
model
();
}
void
DebuggerManager
::
clearStatusMessage
()
{
m_statusLabel
->
setText
(
m_lastPermanentStatusMessage
);
}
void
DebuggerManager
::
showStatusMessage
(
const
QString
&
msg
,
int
timeout
)
{
Q_UNUSED
(
timeout
)
//qDebug() << "STATUS: " << msg;
showDebuggerOutput
(
"status:"
,
msg
);
mainWindow
()
->
statusBar
()
->
showMessage
(
msg
,
timeout
);
#if 0
QString currentTime = QTime::currentTime().toString("hh:mm:ss.zzz");
ICore *core = m_pm->getObject<Core::ICore>();
//qDebug() << qPrintable(currentTime) << "Setting status: " << msg;
if (msg.isEmpty())
core->messageManager()->displayStatusBarMessage(msg);
else if (timeout == -1)
core->messageManager()->displayStatusBarMessage(tr("Debugger: ") + msg);
else
core->messageManager()->displayStatusBarMessage(tr("Debugger: ") + msg, timeout);
#endif
m_statusLabel
->
setText
(
" "
+
msg
);
if
(
timeout
>
0
)
{
m_statusTimer
->
setSingleShot
(
true
);
m_statusTimer
->
start
(
timeout
);
}
else
{
m_lastPermanentStatusMessage
=
msg
;
m_statusTimer
->
stop
();
}
}
void
DebuggerManager
::
notifyStartupFinished
()
...
...
src/plugins/debugger/debuggermanager.h
View file @
8d3a774f
...
...
@@ -44,9 +44,11 @@ QT_BEGIN_NAMESPACE
class
QAction
;
class
QAbstractItemModel
;
class
QDockWidget
;
class
QLabel
;
class
QMainWindow
;
class
QModelIndex
;
class
QSplitter
;
class
QTimer
;
class
QWidget
;
QT_END_NAMESPACE
...
...
@@ -190,7 +192,8 @@ public:
private:
friend
class
DebugMode
;
virtual
QWidget
*
threadsWindow
()
=
0
;
virtual
QWidget
*
threadsWindow
()
const
=
0
;
virtual
QLabel
*
statusLabel
()
const
=
0
;
virtual
QList
<
QDockWidget
*>
dockWidgets
()
const
=
0
;
virtual
void
createDockWidgets
()
=
0
;
};
...
...
@@ -213,6 +216,7 @@ public:
IDebuggerManagerAccessForEngines
*
engineInterface
();
IDebuggerManagerAccessForDebugMode
*
debugModeInterface
();
QMainWindow
*
mainWindow
()
const
{
return
m_mainWindow
;
}
QLabel
*
statusLabel
()
const
{
return
m_statusLabel
;
}
enum
StartMode
{
startInternal
,
startExternal
,
attachExternal
};
enum
DebuggerType
{
GdbDebugger
,
ScriptDebugger
,
WinDebugger
};
...
...
@@ -272,7 +276,7 @@ public slots:
void
assignValueInDebugger
(
const
QString
&
expr
,
const
QString
&
value
);
void
executeDebuggerCommand
(
const
QString
&
command
);
void
showStatusMessage
(
const
QString
&
msg
,
int
timeout
);
// -1 forever
void
showStatusMessage
(
const
QString
&
msg
,
int
timeout
=
-
1
);
// -1 forever
private
slots
:
void
showDebuggerOutput
(
const
QString
&
prefix
,
const
QString
&
msg
);
...
...
@@ -290,6 +294,7 @@ private slots:
void
reloadRegisters
();
void
registerDockToggled
(
bool
on
);
void
setStatus
(
int
status
);
void
clearStatusMessage
();
private:
//
...
...
@@ -322,7 +327,7 @@ private:
//
// Implementation of IDebuggerManagerAccessForDebugMode
//
QWidget
*
threadsWindow
()
{
return
m_threadsWindow
;
}
QWidget
*
threadsWindow
()
const
{
return
m_threadsWindow
;
}
QList
<
QDockWidget
*>
dockWidgets
()
const
{
return
m_dockWidgets
;
}
void
createDockWidgets
();
...
...
@@ -382,6 +387,7 @@ private:
/// Views
QMainWindow
*
m_mainWindow
;
QLabel
*
m_statusLabel
;
QDockWidget
*
m_breakDock
;
QDockWidget
*
m_disassemblerDock
;
QDockWidget
*
m_modulesDock
;
...
...
@@ -440,6 +446,8 @@ private:
int
m_status
;
bool
m_busy
;
QTimer
*
m_statusTimer
;
QString
m_lastPermanentStatusMessage
;
IDebuggerEngine
*
engine
();
IDebuggerEngine
*
m_engine
;
...
...
src/plugins/debugger/gdbengine.cpp
View file @
8d3a774f
...
...
@@ -347,7 +347,7 @@ void GdbEngine::gdbProcError(QProcess::ProcessError error)
"This is the default return value of error()."
);
}
q
->
showStatusMessage
(
msg
,
5000
);
q
->
showStatusMessage
(
msg
);
QMessageBox
::
critical
(
q
->
mainWindow
(),
tr
(
"Error"
),
msg
);
// act as if it was closed by the core
q
->
exitDebugger
();
...
...
@@ -710,7 +710,7 @@ void GdbEngine::sendCommand(const QString &command, int type,
bool
temporarilyStopped
=
false
;
if
(
needStop
&&
q
->
status
()
==
DebuggerInferiorRunning
)
{
q
->
showStatusMessage
(
tr
(
"Temporarily stopped"
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Temporarily stopped"
));
interruptInferior
();
temporarilyStopped
=
true
;
}
...
...
@@ -1055,7 +1055,7 @@ void GdbEngine::handleExecJumpToLine(const GdbResultRecord &record)
// ~"242\t x *= 2;"
//109^done"
qq
->
notifyInferiorStopped
();
q
->
showStatusMessage
(
tr
(
"Jumped. Stopped."
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Jumped. Stopped."
));
QString
output
=
record
.
data
.
findChild
(
"logstreamoutput"
).
data
();
if
(
!
output
.
isEmpty
())
return
;
...
...
@@ -1074,7 +1074,7 @@ void GdbEngine::handleExecRunToFunction(const GdbResultRecord &record)
// func="foo",args=[{name="str",value="@0x7fff0f450460"}],
// file="main.cpp",fullname="/tmp/g/main.cpp",line="37"}
qq
->
notifyInferiorStopped
();
q
->
showStatusMessage
(
tr
(
"Run to Function finished. Stopped."
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Run to Function finished. Stopped."
));
GdbMi
frame
=
record
.
data
.
findChild
(
"frame"
);
QString
file
=
frame
.
findChild
(
"fullname"
).
data
();
int
line
=
frame
.
findChild
(
"line"
).
data
().
toInt
();
...
...
@@ -1212,7 +1212,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
}
}
else
{
// slow start requested.
q
->
showStatusMessage
(
"Loading
"
+
data
.
toString
()
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Loading
%1..."
).
arg
(
QString
(
data
.
toString
()
))
);
continueInferior
();
}
return
;
...
...
@@ -1231,7 +1231,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
msg
=
"Program exited after receiving signal "
+
data
.
findChild
(
"signal-name"
).
toString
();
}
q
->
showStatusMessage
(
msg
,
-
1
);
q
->
showStatusMessage
(
msg
);
q
->
exitDebugger
();
return
;
}
...
...
@@ -1271,7 +1271,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
if
(
isStoppedReason
(
reason
)
||
reason
.
isEmpty
())
{
// Need another round trip
if
(
reason
==
"breakpoint-hit"
)
{
q
->
showStatusMessage
(
tr
(
"Stopped at breakpoint
.
"
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Stopped at breakpoint"
));
GdbMi
frame
=
data
.
findChild
(
"frame"
);
//qDebug() << frame.toString();
m_currentFrame
=
frame
.
findChild
(
"addr"
).
data
()
+
'%'
+
...
...
@@ -1283,7 +1283,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
QVariant
var
=
QVariant
::
fromValue
<
GdbMi
>
(
data
);
sendCommand
(
"p 0"
,
GdbAsyncOutput2
,
var
);
// dummy
}
else
{
q
->
showStatusMessage
(
tr
(
"Stopped.
%1
"
).
arg
(
reason
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Stopped.
Reason:
\"
%1
\"
"
).
arg
(
reason
));
handleAsyncOutput2
(
data
);
}
return
;
...
...
@@ -1305,7 +1305,7 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data)
// system="0.00136",start="1218810678.805432",end="1218810678.812011"}
q
->
resetLocation
();
qq
->
notifyInferiorStopped
();
q
->
showStatusMessage
(
tr
(
"Run to Function finished. Stopped."
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Run to Function finished. Stopped."
));
GdbMi
frame
=
data
.
findChild
(
"frame"
);
QString
file
=
frame
.
findChild
(
"fullname"
).
data
();
int
line
=
frame
.
findChild
(
"line"
).
data
().
toInt
();
...
...
@@ -1378,8 +1378,9 @@ void GdbEngine::handleShowVersion(const GdbResultRecord &response)
if
(
response
.
resultClass
==
GdbResultDone
)
{
m_gdbVersion
=
100
;
QString
msg
=
response
.
data
.
findChild
(
"consolestreamoutput"
).
data
();
QRegExp
supported
(
"GNU gdb 6.[6789]"
);
if
(
msg
.
indexOf
(
supported
)
==
-
1
)
{
QRegExp
supported
(
"GNU gdb(.*) (
\\
d+)
\\
.(
\\
d+)
\\
.(
\\
d+)"
);
if
(
supported
.
indexIn
(
msg
)
==
-
1
)
{
qDebug
()
<<
"UNSUPPORTED GDB VERSION "
<<
msg
;
QStringList
list
=
msg
.
split
(
"
\n
"
);
while
(
list
.
size
()
>
2
)
list
.
removeLast
();
...
...
@@ -1396,11 +1397,11 @@ void GdbEngine::handleShowVersion(const GdbResultRecord &response)
#else
//QMessageBox::information(m_mainWindow, tr("Warning"), msg);
#endif
}
int
pos
=
msg
.
indexOf
(
"GNU gdb 6."
);
if
(
pos
!=
-
1
)
{
m_gdbVersion
=
600
+
(
msg
.
at
(
pos
+
10
).
unicode
()
-
'0'
)
*
10
;
//qDebug() << "GDB VERSION " << m_gdbVersion
<< msg
;
}
else
{
m_gdbVersion
=
10000
*
supported
.
cap
(
2
).
toInt
()
+
100
*
supported
.
cap
(
3
).
toInt
()
+
1
*
supported
.
cap
(
4
).
toInt
()
;
//qDebug() << "GDB VERSION " << m_gdbVersion;
}
}
}
...
...
@@ -1423,14 +1424,14 @@ void GdbEngine::handleExecRun(const GdbResultRecord &response)
{
if
(
response
.
resultClass
==
GdbResultRunning
)
{
qq
->
notifyInferiorRunning
();
q
->
showStatusMessage
(
tr
(
"Running..."
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Running..."
));
//reloadModules();
}
else
if
(
response
.
resultClass
==
GdbResultError
)
{
QString
msg
=
response
.
data
.
findChild
(
"msg"
).
data
();
if
(
msg
==
"Cannot find bounds of current function"
)
{
qq
->
notifyInferiorStopped
();
//q->showStatusMessage(tr("No debug information available. "
// "Leaving function...")
, -1
);
// "Leaving function..."));
//stepOutExec();
}
else
{
QMessageBox
::
critical
(
q
->
mainWindow
(),
tr
(
"Error"
),
...
...
@@ -1558,7 +1559,7 @@ bool GdbEngine::startDebugger()
qDebug() << "ExeFile: " << q->m_executable;
#endif
q
->
showStatusMessage
(
"Starting Debugger"
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Starting Debugger"
)
);
emit
gdbInputAvailable
(
QString
(),
theGdbSettings
().
m_gdbCmd
+
' '
+
gdbArgs
.
join
(
" "
));
m_gdbProc
.
start
(
theGdbSettings
().
m_gdbCmd
,
gdbArgs
);
...
...
@@ -1567,7 +1568,7 @@ bool GdbEngine::startDebugger()
if
(
m_gdbProc
.
state
()
!=
QProcess
::
Running
)
return
false
;
q
->
showStatusMessage
(
tr
(
"Gdb Running"
)
,
-
1
);
q
->
showStatusMessage
(
tr
(
"Gdb Running"
));
sendCommand
(
"show version"
,
GdbShowVersion
);
if
(
qq
->
useFastStart
())
{
...
...
@@ -2337,8 +2338,8 @@ void GdbEngine::handleModulesList(const GdbResultRecord &record)
void
GdbEngine
::
handleStackSelectThread
(
const
GdbResultRecord
&
record
,
int
)
{
Q_UNUSED
(
record
);
qDebug
(
"FIXME: StackHandler::handleOutput: SelectThread"
);
q
->
showStatusMessage
(
tr
(
"Retrieving data for stack view..."
),
-
1
);
//
qDebug("FIXME: StackHandler::handleOutput: SelectThread");
q
->
showStatusMessage
(
tr
(
"Retrieving data for stack view..."
),
3000
);
sendCommand
(
"-stack-list-frames"
,
StackListFrames
);
}
...
...
@@ -2432,7 +2433,7 @@ void GdbEngine::selectThread(int index)
QList
<
ThreadData
>
threads
=
threadsHandler
->
threads
();
QWB_ASSERT
(
index
<
threads
.
size
(),
return
);
int
id
=
threads
.
at
(
index
).
id
;
q
->
showStatusMessage
(
tr
(
"Retrieving data for stack view..."
),
-
1
);
q
->
showStatusMessage
(
tr
(
"Retrieving data for stack view..."
),
1
0000
);
sendCommand
(
QLatin1String
(
"-thread-select "
)
+
QString
::
number
(
id
),
StackSelectThread
);
}
...
...
@@ -2545,7 +2546,7 @@ bool GdbEngine::supportsThreads() const
{
// 6.3 crashes happily on -thread-list-ids. So don't use it.
// The test below is a semi-random pick, 6.8 works fine
return
m_gdbVersion
>
6
5
0
;
return
m_gdbVersion
>
6
050
0
;
}
//////////////////////////////////////////////////////////////////////
...
...
@@ -3081,7 +3082,7 @@ void GdbEngine::runCustomDumper(const WatchData & data0, bool dumpChildren)
q
->
showStatusMessage
(
tr
(
"Retrieving data for watch view (%1 requests pending)..."
)
.
arg
(
m_pendingRequests
+
1
),
-
1
);
.
arg
(
m_pendingRequests
+
1
),
1
0000
);
// create response slot for socket data
QVariant
var
;
var
.
setValue
(
data
);
...
...
@@ -3299,7 +3300,7 @@ void GdbEngine::updateWatchModel2()
PENDING_DEBUG
(
"REBUILDING MODEL"
)
emit
gdbInputAvailable
(
QString
(),
"["
+
currentTime
()
+
"] <Rebuild Watchmodel>"
);
q
->
showStatusMessage
(
tr
(
"Finished retrieving data."
),
-
1
);
q
->
showStatusMessage
(
tr
(
"Finished retrieving data."
),
400
);
qq
->
watchHandler
()
->
rebuildModel
();
if
(
!
m_toolTipExpression
.
isEmpty
())
{
...
...
@@ -3313,9 +3314,6 @@ void GdbEngine::updateWatchModel2()
"Cannot evaluate expression: "
+
m_toolTipExpression
);
}
}
//qDebug() << "INSERT DATA" << data0.toString();
//q->showStatusMessage(tr("Stopped."), 5000);
}
void
GdbEngine
::
handleQueryDataDumper1
(
const
GdbResultRecord
&
record
)
...
...
@@ -3897,7 +3895,7 @@ void GdbEngine::handleToolTip(const GdbResultRecord &record,
if
(
isCustomValueDumperAvailable
(
m_toolTip
.
type
))
runCustomDumper
(
m_toolTip
,
false
);
else
q
->
showStatusMessage
(
tr
(
"Retrieving data for tooltip..."
),
-
1
);
q
->
showStatusMessage
(
tr
(
"Retrieving data for tooltip..."
),
1
0000
);
sendCommand
(
"-data-evaluate-expression "
+
m_toolTip
.
exp
,
WatchToolTip
,
"evaluate"
);
//sendToolTipCommand("-var-evaluate-expression tooltip")
...
...
src/plugins/debugger/mode.cpp
View file @
8d3a774f
...
...
@@ -169,6 +169,8 @@ QToolBar *DebugMode::createToolBar()
managerAccess
->
threadsWindow
(),
SIGNAL
(
threadSelected
(
int
)));
debugToolBar
->
addWidget
(
threadBox
);
debugToolBar
->
addWidget
(
managerAccess
->
statusLabel
());
QWidget
*
stretch
=
new
QWidget
;
stretch
->
setSizePolicy
(
QSizePolicy
::
Expanding
,
QSizePolicy
::
Minimum
);
debugToolBar
->
addWidget
(
stretch
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment