Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
e0a0aebb
Commit
e0a0aebb
authored
Oct 15, 2009
by
Oswald Buddenhagen
Browse files
group declarations logically
parent
0e398303
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/plugins/debugger/gdb/gdbengine.h
View file @
e0a0aebb
...
...
@@ -95,81 +95,70 @@ private:
friend
class
RemoteGdbAdapter
;
friend
class
TrkGdbAdapter
;
//
// IDebuggerEngine implementation
//
void
stepExec
();
void
stepOutExec
();
void
nextExec
();
void
stepIExec
();
void
nextIExec
();
void
shutdown
();
void
setToolTipExpression
(
const
QPoint
&
mousePos
,
TextEditor
::
ITextEditor
*
editor
,
int
cursorPos
);
void
startDebugger
(
const
DebuggerStartParametersPtr
&
sp
);
void
exitDebugger
();
void
detachDebugger
();
private:
////////// General Interface //////////
void
continueInferiorInternal
();
void
autoContinueInferior
();
void
continueInferior
();
void
interruptInferior
();
virtual
void
addOptionPages
(
QList
<
Core
::
IOptionsPage
*>
*
opts
)
const
;
void
runToLineExec
(
const
QString
&
fileName
,
int
lineNumber
);
void
runToFunctionExec
(
const
QString
&
functionName
);
void
jumpToLineExec
(
const
QString
&
fileName
,
int
lineNumber
);
virtual
bool
checkConfiguration
(
int
toolChain
,
QString
*
errorMessage
,
QString
*
settingsPage
=
0
)
const
;
void
activateFrame
(
int
index
);
void
selectThread
(
int
index
);
virtual
bool
isGdbEngine
()
const
{
return
true
;
}
Q_SLOT
void
attemptBreakpointSynchronization
();
virtual
void
startDebugger
(
const
DebuggerStartParametersPtr
&
sp
);
virtual
void
exitDebugger
();
virtual
void
detachDebugger
();
virtual
void
shutdown
();
void
assignValueInDebugger
(
const
QString
&
expr
,
const
QString
&
value
);
void
executeDebuggerCommand
(
const
QString
&
command
);
void
watchPoint
(
const
QPoint
&
);
virtual
void
executeDebuggerCommand
(
const
QString
&
command
);
void
loadSymbols
(
const
QString
&
moduleName
);
void
loadAllSymbols
();
virtual
QList
<
Symbol
>
moduleSymbols
(
const
QString
&
moduleName
);
private:
////////// General State //////////
void
fetchMemory
(
MemoryViewAgent
*
agent
,
quint64
addr
,
quint64
length
);
void
handleFetchMemory
(
const
GdbResponse
&
response
);
void
initializeVariables
();
DebuggerStartMode
startMode
()
const
;
const
DebuggerStartParameters
&
startParameters
()
const
{
return
*
m_startParameters
;
}
Q_SLOT
void
setAutoDerefPointers
(
const
QVariant
&
on
);
void
fetchDisassembler
(
DisassemblerViewAgent
*
agent
,
const
StackFrame
&
frame
);
void
fetchDisassemblerByAddress
(
DisassemblerViewAgent
*
agent
,
bool
useMixedMode
);
void
handleFetchDisassemblerByLine
(
const
GdbResponse
&
response
);
void
handleFetchDisassemblerByAddress1
(
const
GdbResponse
&
response
);
void
handleFetchDisassemblerByAddress0
(
const
GdbResponse
&
response
);
DebuggerStartParametersPtr
m_startParameters
;
QSharedPointer
<
TrkOptions
>
m_trkOptions
;
Q_SLOT
void
setDebugDebuggingHelpers
(
const
QVariant
&
on
);
Q_SLOT
void
setUseDebuggingHelpers
(
const
QVariant
&
on
);
Q_SLOT
void
setAutoDerefPointers
(
const
QVariant
&
on
);
bool
isGdbEngine
()
const
{
return
true
;
}
bool
isSynchroneous
()
const
;
private:
////////// Gdb Process Management //////////
bool
checkConfiguration
(
int
toolChain
,
QString
*
errorMessage
,
QString
*
settingsPage
=
0
)
const
;
AbstractGdbAdapter
*
createAdapter
(
const
DebuggerStartParametersPtr
&
dp
);
void
connectAdapter
();
void
startInferior
();
//
// Own stuff
//
void
gdbInputAvailable
(
int
channel
,
const
QString
&
msg
)
{
m_manager
->
showDebuggerInput
(
channel
,
msg
);
}
void
gdbOutputAvailable
(
int
channel
,
const
QString
&
msg
)
{
m_manager
->
showDebuggerOutput
(
channel
,
msg
);
}
int
currentFrame
()
const
;
private
slots
:
void
readGdbStandardOutput
();
void
readGdbStandardError
();
void
readDebugeeOutput
(
const
QByteArray
&
data
);
bool
supportsThreads
()
const
;
void
gotoLocation
(
const
StackFrame
&
frame
,
bool
setLocationMarker
);
StackFrame
parseStackFrame
(
const
GdbMi
&
mi
,
int
level
);
void
handleAdapterStarted
();
void
handleAdapterStartFailed
(
const
QString
&
msg
,
const
QString
&
settingsIdHint
=
QString
());
void
connectAdapter
();
void
initializeVariables
();
QString
fullName
(
const
QString
&
fileName
);
// get one usable name out of these, try full names first
QString
fullName
(
const
QStringList
&
candidates
);
void
handleInferiorStartFailed
(
const
QString
&
msg
);
void
handleInferiorShutDown
();
void
handleInferiorShutdownFailed
(
const
QString
&
msg
);
void
handleAdapterCrashed
(
const
QString
&
msg
);
void
handleAdapterShutDown
();
void
handleAdapterShutdownFailed
(
const
QString
&
msg
);
void
handleResult
(
const
GdbResponse
&
response
);
private:
QTextCodec
*
m_outputCodec
;
QTextCodec
::
ConverterState
m_outputCodecState
;
QByteArray
m_inbuffer
;
public:
// otherwise the Qt flag macros are unhappy
AbstractGdbAdapter
*
m_gdbAdapter
;
private:
////////// Gdb Command Management //////////
public:
// otherwise the Qt flag macros are unhappy
enum
GdbCommandFlag
{
NoFlags
=
0
,
NeedsStop
=
1
,
// The command needs a stopped inferior
...
...
@@ -181,9 +170,8 @@ public: // otherwise the Qt flag macros are unhappy
ExitRequest
=
32
// Callback expect GdbResultExit instead of GdbResultDone
};
Q_DECLARE_FLAGS
(
GdbCommandFlags
,
GdbCommandFlag
)
private:
private:
typedef
void
(
GdbEngine
::*
GdbCommandCallback
)
(
const
GdbResponse
&
response
);
typedef
void
(
AbstractGdbAdapter
::*
AdapterCallback
)
...
...
@@ -230,78 +218,78 @@ private:
void
postCommandHelper
(
const
GdbCommand
&
cmd
);
void
setTokenBarrier
();
void
updateAll
();
void
updateLocals
(
const
QVariant
&
cookie
=
QVariant
());
QHash
<
int
,
GdbCommand
>
m_cookieForToken
;
void
gdbInputAvailable
(
int
channel
,
const
QString
&
msg
)
{
m_manager
->
showDebuggerInput
(
channel
,
msg
);
}
void
gdbOutputAvailable
(
int
channel
,
const
QString
&
msg
)
{
m_manager
->
showDebuggerOutput
(
channel
,
msg
);
}
QByteArray
m_pendingConsoleStreamOutput
;
QByteArray
m_pendingLogStreamOutput
;
private
slots
:
void
readGdbStandardOutput
();
void
readGdbStandardError
();
void
readDebugeeOutput
(
const
QByteArray
&
data
)
;
// contains the first token number for the current round
// of evaluation. Responses with older tokens are considers
// out of date and discarded.
int
m_oldestAcceptableToken
;
void
handleAdapterStarted
();
void
handleAdapterStartFailed
(
const
QString
&
msg
,
const
QString
&
settingsIdHint
=
QString
());
int
m_pendingRequests
;
// Watch updating commands in flight
void
handleInferiorStartFailed
(
const
QString
&
msg
);
void
handleInferiorShutDown
();
void
handleInferiorShutdownFailed
(
const
QString
&
msg
)
;
typedef
void
(
GdbEngine
::*
CommandsDoneCallback
)(
);
// function called after all previous responses have been received
CommandsDoneCallback
m_commandsDoneCallback
;
void
handleAdapterCrashed
(
const
QString
&
msg
)
;
void
handleAdapterShutDown
();
void
handleAdapterShutdownFailed
(
const
QString
&
msg
);
QList
<
GdbCommand
>
m_commandsToRunOnTemporaryBreak
;
private:
////////// Gdb Output, State & Capability Handling //////////
private:
void
handleResponse
(
const
QByteArray
&
buff
);
void
handleStopResponse
(
const
GdbMi
&
data
);
void
handleResultRecord
(
const
GdbResponse
&
response
);
void
handleStop1
(
const
GdbResponse
&
response
);
void
handleStop1
(
const
GdbMi
&
data
);
void
handleStop2
(
const
GdbResponse
&
response
);
void
handleStop2
(
const
GdbMi
&
data
);
void
handleResultRecord
(
const
GdbResponse
&
response
);
void
handleExecContinue
(
const
GdbResponse
&
response
);
// void handleExecRunToFunction(const GdbResponse &response);
StackFrame
parseStackFrame
(
const
GdbMi
&
mi
,
int
level
);
virtual
bool
isSynchroneous
()
const
;
bool
supportsThreads
()
const
;
// Gdb initialization sequence
void
handleShowVersion
(
const
GdbResponse
&
response
);
void
handleQuerySources
(
const
GdbResponse
&
response
);
void
handleWatchPoint
(
const
GdbResponse
&
response
);
void
handleIsSynchroneous
(
const
GdbResponse
&
response
);
bool
showToolTip
();
// Convenience
QMainWindow
*
mainWindow
()
const
;
DebuggerStartMode
startMode
()
const
;
qint64
inferiorPid
()
const
{
return
m_manager
->
inferiorPid
();
}
void
handleInferiorPidChanged
(
qint64
pid
)
{
manager
()
->
notifyInferiorPidChanged
(
pid
);
}
int
m_gdbVersion
;
// 6.8.0 is 680
int
m_gdbBuildVersion
;
// MAC only?
bool
m_isSynchroneous
;
// Can act synchroneously?
void
handleChildren
(
const
WatchData
&
parent
,
const
GdbMi
&
child
,
QList
<
WatchData
>
*
insertions
);
const
bool
m_dumperInjectionLoad
;
private:
////////// Inferior Management //////////
QTextCodec
*
m_outputCodec
;
QTextCodec
::
ConverterState
m_outputCodecState
;
Q_SLOT
virtual
void
attemptBreakpointSynchronization
();
QByteArray
m_inbuffer
;
virtual
void
stepExec
();
virtual
void
stepOutExec
();
virtual
void
nextExec
();
virtual
void
stepIExec
();
virtual
void
nextIExec
();
QHash
<
int
,
GdbCommand
>
m_cookieForToken
;
void
continueInferiorInternal
();
void
autoContinueInferior
();
virtual
void
continueInferior
();
virtual
void
interruptInferior
();
QByteArray
m_pendingConsoleStreamOutput
;
QByteArray
m_pendingLogStreamOutput
;
virtual
void
runToLineExec
(
const
QString
&
fileName
,
int
lineNumber
);
virtual
void
runToFunctionExec
(
const
QString
&
functionName
);
// void handleExecRunToFunction(const GdbResponse &response);
virtual
void
jumpToLineExec
(
const
QString
&
fileName
,
int
lineNumber
);
// contains the first token number for the current round
// of evaluation. Responses with older tokens are considers
// out of date and discarded.
int
m_oldestAcceptableToken
;
void
handleExecContinue
(
const
GdbResponse
&
response
);
int
m_gdbV
er
s
io
n
;
// 6.8.0 is 680
int
m_gdbBuildV
er
s
io
n
;
// MAC only?
bool
m_isSynchroneous
;
// Can act synchroneously?
q
int
64
inf
erio
rPid
()
const
{
return
m_manager
->
inferiorPid
();
}
void
handleInf
erio
rPidChanged
(
qint64
pid
)
{
manager
()
->
notifyInferiorPidChanged
(
pid
);
}
void
maybeHandleInferiorPidChanged
(
const
QString
&
pid
);
// awful hack to keep track of used files
QMap
<
QString
,
QString
>
m_shortToFullName
;
QMap
<
QString
,
QString
>
m_fullToShortName
;
private:
////////// View & Data Stuff //////////
virtual
void
selectThread
(
int
index
);
virtual
void
activateFrame
(
int
index
);
void
gotoLocation
(
const
StackFrame
&
frame
,
bool
setLocationMarker
);
//
// Breakpoint specific stuff
...
...
@@ -320,9 +308,13 @@ private:
//
// Modules specific stuff
//
virtual
void
loadSymbols
(
const
QString
&
moduleName
);
virtual
void
loadAllSymbols
();
virtual
QList
<
Symbol
>
moduleSymbols
(
const
QString
&
moduleName
);
void
reloadModules
();
void
handleModulesList
(
const
GdbResponse
&
response
);
bool
m_modulesListOutdated
;
//
// Register specific stuff
...
...
@@ -332,54 +324,83 @@ private:
void
handleRegisterListNames
(
const
GdbResponse
&
response
);
void
handleRegisterListValues
(
const
GdbResponse
&
response
);
//
// Disassembler specific stuff
//
virtual
void
fetchDisassembler
(
DisassemblerViewAgent
*
agent
,
const
StackFrame
&
frame
);
void
fetchDisassemblerByAddress
(
DisassemblerViewAgent
*
agent
,
bool
useMixedMode
);
void
handleFetchDisassemblerByLine
(
const
GdbResponse
&
response
);
void
handleFetchDisassemblerByAddress1
(
const
GdbResponse
&
response
);
void
handleFetchDisassemblerByAddress0
(
const
GdbResponse
&
response
);
QString
parseDisassembler
(
const
GdbMi
&
lines
);
//
// Source file specific stuff
//
void
reloadSourceFiles
();
void
handleQuerySources
(
const
GdbResponse
&
response
);
QString
fullName
(
const
QString
&
fileName
);
// get one usable name out of these, try full names first
QString
fullName
(
const
QStringList
&
candidates
);
// awful hack to keep track of used files
QMap
<
QString
,
QString
>
m_shortToFullName
;
QMap
<
QString
,
QString
>
m_fullToShortName
;
//
// Stack specific stuff
//
void
updateAll
();
void
handleStackListFrames
(
const
GdbResponse
&
response
);
void
handleStackSelectThread
(
const
GdbResponse
&
response
);
void
handleStackListThreads
(
const
GdbResponse
&
response
);
void
handleStackFrame1
(
const
GdbResponse
&
response
);
void
handleStackFrame2
(
const
GdbResponse
&
response
);
QByteArray
m_firstChunk
;
Q_SLOT
void
reloadStack
(
bool
forceGotoLocation
);
Q_SLOT
void
reloadFullStack
();
int
currentFrame
()
const
;
QList
<
GdbMi
>
m_currentFunctionArgs
;
QByteArray
m_firstChunk
;
QString
m_currentFrame
;
//
//
Tooltip
specific stuff
//
Watch
specific stuff
//
void
se
nd
ToolTip
Command
(
const
Q
Str
in
g
&
command
,
const
QString
&
cookie
);
virtual
void
se
t
ToolTip
Expression
(
const
Q
Po
in
t
&
mousePos
,
TextEditor
::
ITextEditor
*
editor
,
int
cursorPos
);
virtual
void
assignValueInDebugger
(
const
QString
&
expr
,
const
QString
&
value
);
virtual
void
fetchMemory
(
MemoryViewAgent
*
agent
,
quint64
addr
,
quint64
length
);
void
handleFetchMemory
(
const
GdbResponse
&
response
);
virtual
void
watchPoint
(
const
QPoint
&
);
void
handleWatchPoint
(
const
GdbResponse
&
response
);
//
// Watch specific stuff
//
// FIXME: BaseClass. called to improve situation for a watch item
void
updateSubItem
(
const
WatchData
&
data
);
void
handleChildren
(
const
WatchData
&
parent
,
const
GdbMi
&
child
,
QList
<
WatchData
>
*
insertions
);
void
updateWatchData
(
const
WatchData
&
data
);
Q_SLOT
void
updateWatchDataHelper
(
const
WatchData
&
data
);
void
rebuildModel
();
bool
showToolTip
();
void
insertData
(
const
WatchData
&
data
);
void
sendWatchParameters
(
const
QByteArray
&
params0
);
void
createGdbVariable
(
const
WatchData
&
data
);
void
maybeHandleInferiorPidChanged
(
const
QString
&
pid
);
void
tryLoadDebuggingHelpers
();
void
tryQueryDebuggingHelpers
();
Q_SLOT
void
recheckDebuggingHelperAvailability
();
void
runDebuggingHelper
(
const
WatchData
&
data
,
bool
dumpChildren
);
void
runDirectDebuggingHelper
(
const
WatchData
&
data
,
bool
dumpChildren
);
bool
hasDebuggingHelperForType
(
const
QString
&
type
)
const
;
void
handleVarListChildren
(
const
GdbResponse
&
response
);
void
handleVarListChildrenHelper
(
const
GdbMi
&
child
,
const
WatchData
&
parent
);
void
handleVarCreate
(
const
GdbResponse
&
response
);
void
handleVarAssign
(
const
GdbResponse
&
response
);
void
handleEvaluateExpression
(
const
GdbResponse
&
response
);
...
...
@@ -390,55 +411,42 @@ private:
void
handleDebuggingHelperValue3
(
const
GdbResponse
&
response
);
void
handleDebuggingHelperEditValue
(
const
GdbResponse
&
response
);
void
handleDebuggingHelperSetup
(
const
GdbResponse
&
response
);
void
updateLocals
(
const
QVariant
&
cookie
=
QVariant
());
void
handleStackListLocals
(
const
GdbResponse
&
response
);
WatchData
localVariable
(
const
GdbMi
&
item
,
const
QStringList
&
uninitializedVariables
,
QMap
<
QByteArray
,
int
>
*
seen
);
void
setLocals
(
const
QList
<
GdbMi
>
&
locals
);
void
handleStackListArguments
(
const
GdbResponse
&
response
);
void
handleVarListChildrenHelper
(
const
GdbMi
&
child
,
const
WatchData
&
parent
);
void
setWatchDataType
(
WatchData
&
data
,
const
GdbMi
&
mi
);
void
setWatchDataDisplayedType
(
WatchData
&
data
,
const
GdbMi
&
mi
);
inline
WatchData
localVariable
(
const
GdbMi
&
item
,
const
QStringList
&
uninitializedVariables
,
QMap
<
QByteArray
,
int
>
*
seen
);
void
connectDebuggingHelperActions
();
void
disconnectDebuggingHelperActions
();
AbstractGdbAdapter
*
createAdapter
(
const
DebuggerStartParametersPtr
&
dp
);
bool
startModeAllowsDumpers
()
const
;
QString
parseDisassembler
(
const
GdbMi
&
lines
);
int
m_pendingRequests
;
QSet
<
QString
>
m_processedNames
;
QtDumperHelper
m_dumperHelper
;
DebuggingHelperState
m_debuggingHelperState
;
QList
<
GdbMi
>
m_currentFunctionArgs
;
QString
m_currentFrame
;
QMap
<
QString
,
QString
>
m_varToType
;
typedef
void
(
GdbEngine
::*
CommandsDoneCallback
)();
// function called after all previous responses have been received
CommandsDoneCallback
m_commandsDoneCallback
;
void
startInferior
();
bool
m_modulesListOutdated
;
QList
<
GdbCommand
>
m_commandsToRunOnTemporaryBreak
;
private:
////////// Dumper Management //////////
DebuggerStartParametersPtr
m_startParameters
;
// make sure to re-initialize new members in initializeVariables();
bool
startModeAllowsDumpers
()
const
;
void
tryLoadDebuggingHelpers
();
void
tryQueryDebuggingHelpers
();
Q_SLOT
void
recheckDebuggingHelperAvailability
();
void
connectDebuggingHelperActions
();
void
disconnectDebuggingHelperActions
();
Q_SLOT
void
setDebugDebuggingHelpers
(
const
QVariant
&
on
);
Q_SLOT
void
setUseDebuggingHelpers
(
const
QVariant
&
on
);
QSharedPointer
<
TrkOptions
>
m_trkOptions
;
const
bool
m_dumperInjectionLoad
;
DebuggingHelperState
m_debuggingHelperState
;
QtDumperHelper
m_dumperHelper
;
AbstractGdbAdapter
*
m_gdbAdapter
;
private:
////////// Convenience Functions //////////
public:
QString
errorMessage
(
QProcess
::
ProcessError
error
);
void
showMessageBox
(
int
icon
,
const
QString
&
title
,
const
QString
&
text
);
void
debugMessage
(
const
QString
&
msg
);
void
addOptionPages
(
QList
<
Core
::
IOptionsPage
*>
*
opts
)
const
;
const
DebuggerStartParameters
&
startParameters
()
const
{
return
*
m_startParameters
;
}
QMainWindow
*
mainWindow
()
const
;
};
}
// namespace Internal
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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