Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Q
qt-creator
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Tobias Hunger
qt-creator
Commits
4d7abbc1
Commit
4d7abbc1
authored
15 years ago
by
hjk
Browse files
Options
Downloads
Patches
Plain Diff
debugger: work on trk stepping
parent
9b0754a4
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/plugins/debugger/gdb/trkgdbadapter.cpp
+61
-15
61 additions, 15 deletions
src/plugins/debugger/gdb/trkgdbadapter.cpp
src/plugins/debugger/gdb/trkgdbadapter.h
+5
-1
5 additions, 1 deletion
src/plugins/debugger/gdb/trkgdbadapter.h
with
66 additions
and
16 deletions
src/plugins/debugger/gdb/trkgdbadapter.cpp
+
61
−
15
View file @
4d7abbc1
...
@@ -181,6 +181,17 @@ QByteArray TrkGdbAdapter::trkReadMemoryMessage(uint addr, uint len)
...
@@ -181,6 +181,17 @@ QByteArray TrkGdbAdapter::trkReadMemoryMessage(uint addr, uint len)
return
ba
;
return
ba
;
}
}
QByteArray
TrkGdbAdapter
::
trkStepRangeMessage
(
byte
option
)
{
QByteArray
ba
;
appendByte
(
&
ba
,
option
);
appendInt
(
&
ba
,
m_snapshot
.
registers
[
RegisterPC
]);
// start address
appendInt
(
&
ba
,
m_snapshot
.
registers
[
RegisterPC
]);
// end address
appendInt
(
&
ba
,
m_session
.
pid
);
appendInt
(
&
ba
,
m_session
.
tid
);
return
ba
;
}
void
TrkGdbAdapter
::
startInferior
()
void
TrkGdbAdapter
::
startInferior
()
{
{
QString
errorMessage
;
QString
errorMessage
;
...
@@ -624,20 +635,15 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
...
@@ -624,20 +635,15 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
logMessage
(
" from "
+
hexxNumber
(
m_snapshot
.
registers
[
RegisterPC
]));
logMessage
(
" from "
+
hexxNumber
(
m_snapshot
.
registers
[
RegisterPC
]));
sendGdbServerAck
();
sendGdbServerAck
();
m_running
=
true
;
m_running
=
true
;
QByteArray
ba
;
QByteArray
ba
=
trkStepRangeMessage
(
0x01
);
// options "step into"
appendByte
(
&
ba
,
0x01
);
// options
sendTrkMessage
(
0x19
,
TrkCB
(
handleStepInto
),
ba
,
"Step range"
);
appendInt
(
&
ba
,
m_snapshot
.
registers
[
RegisterPC
]);
// start address
appendInt
(
&
ba
,
m_snapshot
.
registers
[
RegisterPC
]);
// end address
appendInt
(
&
ba
,
m_session
.
pid
);
appendInt
(
&
ba
,
m_session
.
tid
);
sendTrkMessage
(
0x19
,
TrkCB
(
handleStepRange
),
ba
,
"Step range"
);
}
}
else
if
(
cmd
==
"vCont?"
)
{
else
if
(
cmd
==
"vCont?"
)
{
// actions supported by the vCont packet
// actions supported by the vCont packet
sendGdbServerAck
();
sendGdbServerAck
();
//sendGdbServerMessage("OK"); // we don't support vCont.
//sendGdbServerMessage("OK"); // we don't support vCont.
sendGdbServerMessage
(
"vCont;c;C;s;S"
);
sendGdbServerMessage
(
"vCont;c;C;s;S
;n
"
);
}
}
else
if
(
cmd
==
"vCont;c"
)
{
else
if
(
cmd
==
"vCont;c"
)
{
...
@@ -727,8 +733,12 @@ void TrkGdbAdapter::executeCommand(const QString &msg)
...
@@ -727,8 +733,12 @@ void TrkGdbAdapter::executeCommand(const QString &msg)
sendGdbMessage
(
"-exec-interrupt"
);
sendGdbMessage
(
"-exec-interrupt"
);
}
else
if
(
msg
==
"C"
)
{
}
else
if
(
msg
==
"C"
)
{
sendTrkMessage
(
0x18
,
TrkCallback
(),
trkContinueMessage
(),
"CONTINUE"
);
sendTrkMessage
(
0x18
,
TrkCallback
(),
trkContinueMessage
(),
"CONTINUE"
);
}
else
if
(
msg
==
"S"
)
{
sendTrkMessage
(
0x19
,
TrkCallback
(),
trkStepRangeMessage
(
0x01
),
"STEP"
);
}
else
if
(
msg
==
"N"
)
{
sendTrkMessage
(
0x19
,
TrkCallback
(),
trkStepRangeMessage
(
0x11
),
"NEXT"
);
}
else
if
(
msg
==
"R"
)
{
}
else
if
(
msg
==
"R"
)
{
sendTrkMessage
(
0x1
8
,
TrkCB
(
handleReadRegisters
),
sendTrkMessage
(
0x1
2
,
TrkCB
(
handleReadRegisters
),
trkReadRegisterMessage
(),
"READ REGS"
);
trkReadRegisterMessage
(),
"READ REGS"
);
}
else
if
(
msg
==
"I"
)
{
}
else
if
(
msg
==
"I"
)
{
interruptInferior
();
interruptInferior
();
...
@@ -1052,17 +1062,53 @@ void TrkGdbAdapter::handleReadMemoryUnbuffered(const TrkResult &result)
...
@@ -1052,17 +1062,53 @@ void TrkGdbAdapter::handleReadMemoryUnbuffered(const TrkResult &result)
}
}
}
}
void
TrkGdbAdapter
::
handleStep
Range
(
const
TrkResult
&
result
)
void
TrkGdbAdapter
::
handleStep
Into
(
const
TrkResult
&
result
)
{
{
// [80 0f 00]
if
(
result
.
errorCode
())
{
if
(
result
.
errorCode
())
{
logMessage
(
"ERROR: "
+
result
.
errorString
());
logMessage
(
"ERROR: "
+
result
.
errorString
()
+
"in handleStepInto"
);
sendGdbServerMessage
(
"S05"
,
"Stepping finished"
);
// Try fallback with Step Over
QByteArray
ba
=
trkStepRangeMessage
(
0x11
);
// options "step over"
sendTrkMessage
(
0x19
,
TrkCB
(
handleStepInto2
),
ba
,
"Step range"
);
return
;
return
;
}
}
logMessage
(
"STEPPING FINISHED "
);
// The gdb server response is triggered later by the Stop Reply packet
// The gdb server response is triggered later by the Stop Reply packet
//sendGdbServerMessage("S05", "Stepping finished");
logMessage
(
"STEP INTO FINISHED "
);
}
void
TrkGdbAdapter
::
handleStepInto2
(
const
TrkResult
&
result
)
{
if
(
result
.
errorCode
())
{
logMessage
(
"ERROR: "
+
result
.
errorString
()
+
"in handleStepInto2"
);
// Try fallback with Continue
sendTrkMessage
(
0x18
,
TrkCallback
(),
trkContinueMessage
(),
"CONTINUE"
);
//sendGdbServerMessage("S05", "Stepping finished");
return
;
}
logMessage
(
"STEP INTO FINISHED (FALLBACK)"
);
}
void
TrkGdbAdapter
::
handleStepOver
(
const
TrkResult
&
result
)
{
if
(
result
.
errorCode
())
{
logMessage
(
"ERROR: "
+
result
.
errorString
()
+
"in handleStepOver"
);
// Try fallback with Step Into
QByteArray
ba
=
trkStepRangeMessage
(
0x01
);
// options "step into"
sendTrkMessage
(
0x19
,
TrkCB
(
handleStepOver
),
ba
,
"Step range"
);
return
;
}
logMessage
(
"STEP OVER FINISHED "
);
}
void
TrkGdbAdapter
::
handleStepOver2
(
const
TrkResult
&
result
)
{
if
(
result
.
errorCode
())
{
logMessage
(
"ERROR: "
+
result
.
errorString
()
+
"in handleStepOver2"
);
// Try fallback with Continue
sendTrkMessage
(
0x18
,
TrkCallback
(),
trkContinueMessage
(),
"CONTINUE"
);
//sendGdbServerMessage("S05", "Stepping finished");
return
;
}
logMessage
(
"STEP OVER FINISHED (FALLBACK)"
);
}
}
void
TrkGdbAdapter
::
handleAndReportSetBreakpoint
(
const
TrkResult
&
result
)
void
TrkGdbAdapter
::
handleAndReportSetBreakpoint
(
const
TrkResult
&
result
)
...
...
This diff is collapsed.
Click to expand it.
src/plugins/debugger/gdb/trkgdbadapter.h
+
5
−
1
View file @
4d7abbc1
...
@@ -163,10 +163,14 @@ public:
...
@@ -163,10 +163,14 @@ public:
QByteArray
trkReadRegisterMessage
();
QByteArray
trkReadRegisterMessage
();
QByteArray
trkReadMemoryMessage
(
uint
addr
,
uint
len
);
QByteArray
trkReadMemoryMessage
(
uint
addr
,
uint
len
);
QByteArray
trkBreakpointMessage
(
uint
addr
,
uint
len
,
bool
armMode
=
true
);
QByteArray
trkBreakpointMessage
(
uint
addr
,
uint
len
,
bool
armMode
=
true
);
QByteArray
trkStepRangeMessage
(
byte
option
);
void
handleAndReportSetBreakpoint
(
const
TrkResult
&
result
);
void
handleAndReportSetBreakpoint
(
const
TrkResult
&
result
);
void
handleReadMemoryBuffered
(
const
TrkResult
&
result
);
void
handleReadMemoryBuffered
(
const
TrkResult
&
result
);
void
handleReadMemoryUnbuffered
(
const
TrkResult
&
result
);
void
handleReadMemoryUnbuffered
(
const
TrkResult
&
result
);
void
handleStepRange
(
const
TrkResult
&
result
);
void
handleStepInto
(
const
TrkResult
&
result
);
void
handleStepInto2
(
const
TrkResult
&
result
);
void
handleStepOver
(
const
TrkResult
&
result
);
void
handleStepOver2
(
const
TrkResult
&
result
);
void
handleReadRegisters
(
const
TrkResult
&
result
);
void
handleReadRegisters
(
const
TrkResult
&
result
);
void
reportReadMemoryBuffered
(
const
TrkResult
&
result
);
void
reportReadMemoryBuffered
(
const
TrkResult
&
result
);
void
reportToGdb
(
const
TrkResult
&
result
);
void
reportToGdb
(
const
TrkResult
&
result
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment