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
Marco Bubke
flatpak-qt-creator
Commits
3aa08efb
Commit
3aa08efb
authored
Feb 12, 2009
by
hjk
Browse files
Fixes: debugger: work on breakpoints in plugins
parent
04626a3e
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/plugins/debugger/debuggermanager.cpp
View file @
3aa08efb
...
...
@@ -558,7 +558,7 @@ void DebuggerManager::notifyInferiorUpdateFinished()
void
DebuggerManager
::
notifyInferiorRunningRequested
()
{
setStatus
(
DebuggerInferiorRunningRequested
);
showStatusMessage
(
tr
(
"Running..."
),
5000
);
showStatusMessage
(
tr
(
"Running
requested
..."
),
5000
);
}
void
DebuggerManager
::
notifyInferiorRunning
()
...
...
@@ -576,7 +576,7 @@ void DebuggerManager::notifyInferiorExited()
void
DebuggerManager
::
notifyInferiorPidChanged
(
int
pid
)
{
//QMessageBox::warning(0, "PID", "PID: " + QString::number(pid));
//
qDebug() << "PID: " << pid;
qDebug
()
<<
"PID: "
<<
pid
;
emit
inferiorPidChanged
(
pid
);
}
...
...
src/plugins/debugger/debuggerplugin.cpp
View file @
3aa08efb
...
...
@@ -337,7 +337,6 @@ void GdbOptionPage::apply()
m_settings
.
m_pluginSelectedBreakpointsPattern
=
m_ui
.
lineEditSelectedPluginBreakpointsPattern
->
text
();
*
m_plugin
->
m_manager
->
settings
()
=
m_settings
;
m_plugin
->
writeSettings
();
}
...
...
src/plugins/debugger/gdbengine.cpp
View file @
3aa08efb
...
...
@@ -99,10 +99,8 @@ enum GdbCommandType
GdbQueryPwd
,
GdbQuerySources
,
GdbAsyncOutput2
,
GdbStart
,
GdbExecRun
,
GdbExecStart1
,
GdbExecStart2
,
GdbExecStart3
,
GdbExecRunToFunction
,
GdbExecStep
,
GdbExecNext
,
...
...
@@ -460,13 +458,28 @@ void GdbEngine::handleResponse()
break
;
}
case
'~'
:
case
'@'
:
case
'~'
:
{
QString
data
=
GdbMi
::
parseCString
(
from
,
to
);
m_pendingConsoleStreamOutput
+=
data
;
m_inbuffer
=
QByteArray
(
from
,
to
-
from
);
break
;
}
case
'@'
:
{
QString
data
=
GdbMi
::
parseCString
(
from
,
to
);
m_pendingTargetStreamOutput
+=
data
;
m_inbuffer
=
QByteArray
(
from
,
to
-
from
);
break
;
}
case
'&'
:
{
QString
data
=
GdbMi
::
parseCString
(
from
,
to
);
handleStreamOutput
(
data
,
c
);
//dump(oldfrom, from, record.toString());
m_pendingLogStreamOutput
+=
data
;
m_inbuffer
=
QByteArray
(
from
,
to
-
from
);
// On Windows, the contents seem to depend on the debugger
// version and/or OS version used.
if
(
data
.
startsWith
(
"warning:"
))
qq
->
showApplicationOutput
(
data
);
break
;
}
...
...
@@ -759,14 +772,8 @@ void GdbEngine::handleResult(const GdbResultRecord & record, int type,
handleExecRun
(
record
);
break
;
case
GdbExecStart1
:
handleExecStart1
(
record
);
break
;
case
GdbExecStart2
:
//handleExecStart2(record);
break
;
case
GdbExecStart3
:
handleExecStart3
(
record
);
case
GdbStart
:
handleStart
(
record
);
break
;
case
GdbInfoProc
:
handleInfoProc
(
record
);
...
...
@@ -1028,84 +1035,6 @@ void GdbEngine::handleExecRunToFunction(const GdbResultRecord &record)
q
->
gotoLocation
(
file
,
line
,
true
);
}
void
GdbEngine
::
handleStreamOutput
(
const
QString
&
data
,
char
code
)
{
// Linux
if
(
data
.
contains
(
"[New Thread"
))
{
QRegExp
re
(
"
\\
[New Thread 0x([0-9a-f]*)
\\
(LWP ([0-9]*)
\\
)
\\
]"
);
if
(
re
.
indexIn
(
data
)
!=
-
1
)
maybeHandleInferiorPidChanged
(
re
.
cap
(
2
));
}
// Mac
if
(
data
.
contains
(
"[Switching to process "
))
{
QRegExp
re
(
"
\\
[Switching to process ([0-9]*) local thread 0x([0-9a-f]*)
\\
]"
);
if
(
re
.
indexIn
(
data
)
!=
-
1
)
maybeHandleInferiorPidChanged
(
re
.
cap
(
1
));
}
// present it twice: now and together with the next 'real' result
switch
(
code
)
{
case
'~'
:
m_pendingConsoleStreamOutput
+=
data
;
break
;
case
'@'
:
m_pendingTargetStreamOutput
+=
data
;
break
;
case
'&'
:
m_pendingLogStreamOutput
+=
data
;
// On Windows, the contents seem to depend on the debugger
// version and/or OS version used.
if
(
data
.
startsWith
(
"warning:"
))
qq
->
showApplicationOutput
(
data
);
break
;
}
#ifdef Q_OS_LINUX
if
(
data
.
startsWith
(
"Pending break"
)
&&
data
.
contains
(
"
\"
resolved"
))
{
qDebug
()
<<
"SCHEDULING -break-list"
;
//m_breakListOnStopNeeded = true;
}
#endif
#if 0
if (m_slurpingPTypeOutput)
qDebug() << "SLURP: " << output.data;
// "No symbol \"__dlopen\" in current context."
// "No symbol \"dlopen\" in current context."
if (output.data.startsWith("No symbol ")
&& output.data.contains("dlopen")) {
m_dlopened = true;
return;
}
// output of 'ptype <foo>'
if (output.data.startsWith("type = ")) {
if (output.data.endsWith("{") || output.data.endsWith("{\\n")) {
// multi-line output started here...
m_slurpingPTypeOutput = true;
m_slurpedPTypeOutput = output.data;
} else {
// Happens for simple types. Process it immediately
m_watchHandler->handleTypeContents(output.data);
}
return;
}
if (m_slurpingPTypeOutput) {
m_slurpedPTypeOutput += '\n';
m_slurpedPTypeOutput += output.data;
if (output.data.startsWith("}")) {
// this is the last line...
m_slurpingPTypeOutput = false;
m_watchHandler->handleTypeContents(m_slurpedPTypeOutput);
m_slurpedPTypeOutput.clear();
}
return;
}
#endif
}
static
bool
isExitedReason
(
const
QString
&
reason
)
{
return
reason
==
QLatin1String
(
"exited-normally"
)
// inferior exited normally
...
...
@@ -1633,13 +1562,17 @@ bool GdbEngine::startDebugger()
}
if
(
q
->
startMode
()
==
q
->
startInternal
)
{
emit
gdbInputAvailable
(
QString
(),
QString
());
sendCommand
(
"-file-exec-and-symbols "
+
fileName
,
GdbFileExecAndSymbols
);
//sendCommand("file " + fileName, GdbFileExecAndSymbols);
#ifdef Q_OS_MAC
sendCommand
(
"sharedlibrary apply-load-rules all"
);
#endif
//sendCommand("-gdb-set stop-on-solib-events 1");
runInferior
();
setTokenBarrier
();
if
(
!
q
->
m_processArgs
.
isEmpty
())
sendCommand
(
"-exec-arguments "
+
q
->
m_processArgs
.
join
(
" "
));
sendCommand
(
"set auto-solib-add off"
);
sendCommand
(
"x/2i _start"
,
GdbStart
);
}
if
(
q
->
startMode
()
==
q
->
attachExternal
)
{
...
...
@@ -1678,21 +1611,7 @@ void GdbEngine::continueInferior()
sendCommand
(
"-exec-continue"
,
GdbExecContinue
);
}
void
GdbEngine
::
runInferior
()
{
q
->
resetLocation
();
// FIXME: this ignores important startup messages
setTokenBarrier
();
if
(
!
q
->
m_processArgs
.
isEmpty
())
sendCommand
(
"-exec-arguments "
+
q
->
m_processArgs
.
join
(
" "
));
qq
->
notifyInferiorRunningRequested
();
emit
gdbInputAvailable
(
QString
(),
QString
());
sendCommand
(
"set auto-solib-add off"
);
sendCommand
(
"x/2i _start"
,
GdbExecStart1
);
}
void
GdbEngine
::
handleExecStart1
(
const
GdbResultRecord
&
response
)
void
GdbEngine
::
handleStart
(
const
GdbResultRecord
&
response
)
{
if
(
response
.
resultClass
==
GdbResultDone
)
{
// stdout:&"x/2i _start\n"
...
...
@@ -1702,8 +1621,9 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
QRegExp
needle
(
"0x([0-9a-f]+) <_start
\\
+.*>:"
);
if
(
needle
.
indexIn
(
msg
)
!=
-
1
)
{
//qDebug() << "STREAM: " << msg << needle.cap(1);
sendCommand
(
"tbreak *0x"
+
needle
.
cap
(
1
));
// GdbExecStart3);
sendCommand
(
"-exec-run"
);
// GdbExecStart3);
sendCommand
(
"tbreak *0x"
+
needle
.
cap
(
1
));
sendCommand
(
"-exec-run"
);
qq
->
notifyInferiorRunningRequested
();
}
else
{
qDebug
()
<<
"PARSING START ADDRESS FAILED"
<<
msg
;
}
...
...
@@ -1712,20 +1632,6 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
}
}
void
GdbEngine
::
handleExecStart3
(
const
GdbResultRecord
&
)
{
#if defined(Q_OS_WIN)
sendCommand
(
"info proc"
,
GdbInfoProc
);
#endif
#if defined(Q_OS_LINUX)
sendCommand
(
"info proc"
,
GdbInfoProc
);
#endif
#if defined(Q_OS_MAC)
sendCommand
(
"info pid"
,
GdbInfoProc
,
QVariant
(),
true
);
#endif
attemptBreakpointSynchronization
();
}
void
GdbEngine
::
stepExec
()
{
setTokenBarrier
();
...
...
@@ -2244,12 +2150,7 @@ void GdbEngine::attemptBreakpointSynchronization()
}
}
if
(
updateNeeded
)
{
//interruptAndContinue();
//sendListBreakpoints();
}
if
(
!
updateNeeded
&&
q
->
status
()
==
DebuggerProcessStartingUp
)
{
if
(
!
updateNeeded
)
{
// we continue the execution
continueInferior
();
}
...
...
@@ -4017,7 +3918,6 @@ void GdbEngine::assignValueInDebugger(const QString &expression, const QString &
sendCommand
(
"-var-assign assign "
+
value
,
WatchVarAssign
);
}
void
GdbEngine
::
tryLoadCustomDumpers
()
{
if
(
m_dataDumperState
!=
DataDumperUninitialized
)
...
...
src/plugins/debugger/gdbengine.h
View file @
3aa08efb
...
...
@@ -113,7 +113,6 @@ private:
void
exitDebugger
();
void
continueInferior
();
void
runInferior
();
void
interruptInferior
();
void
runToLineExec
(
const
QString
&
fileName
,
int
lineNumber
);
...
...
@@ -179,14 +178,12 @@ private slots:
private:
int
terminationIndex
(
const
QByteArray
&
buffer
,
int
&
length
);
void
handleSt
reamOutput
(
const
QString
&
output
,
char
cod
e
);
void
handleSt
art
(
const
GdbResultRecord
&
respons
e
);
void
handleAsyncOutput2
(
const
GdbMi
&
data
);
void
handleAsyncOutput
(
const
GdbMi
&
data
);
void
handleResultRecord
(
const
GdbResultRecord
&
response
);
void
handleFileExecAndSymbols
(
const
GdbResultRecord
&
response
);
void
handleExecRun
(
const
GdbResultRecord
&
response
);
void
handleExecStart1
(
const
GdbResultRecord
&
response
);
void
handleExecStart3
(
const
GdbResultRecord
&
response
);
void
handleExecJumpToLine
(
const
GdbResultRecord
&
response
);
void
handleExecRunToFunction
(
const
GdbResultRecord
&
response
);
void
handleInfoShared
(
const
GdbResultRecord
&
response
);
...
...
src/plugins/debugger/idebuggerengine.h
View file @
3aa08efb
...
...
@@ -62,7 +62,6 @@ public:
virtual
void
nextIExec
()
=
0
;
virtual
void
continueInferior
()
=
0
;
virtual
void
runInferior
()
=
0
;
virtual
void
interruptInferior
()
=
0
;
virtual
void
runToLineExec
(
const
QString
&
fileName
,
int
lineNumber
)
=
0
;
...
...
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