You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.4 KiB
100 lines
3.4 KiB
How Breakpoints Work
|
|
How Breakpoints Work
|
|
|
|
Breakpoints are set using the
|
|
't',
|
|
'to',
|
|
'b',
|
|
'g',
|
|
'c',
|
|
or 'when' commands.
|
|
The 't', 'to', 'g', and 'c' commands set
|
|
temporary breakpoints that are automatically deleted when execution
|
|
halts. The 'b' and 'when' commands set persistent breakpoints that must
|
|
be explicitly deleted (using the 'db' command).
|
|
|
|
When the user types a 'b' command to set a breakpoint. The Monitor decides which type of breakpoint to utilize
|
|
using the following algorithm:
|
|
|
|
if (is_writeable(addr)) bptype = RAM;
|
|
else if (is_cacheable(addr) & cpu_has_ilock) bptype = ILOCK;
|
|
else if (cpu_has_hwbp) bptype = HW;
|
|
else error();
|
|
|
|
This information is saved in an array. When execution is started, the
|
|
Monitor walks through the breakpoint array and implements the
|
|
breakpoints using the following rules:
|
|
|
|
RAM
|
|
Replace the instruction at the specified address with a "break"
|
|
instruction and save the previous contents (the instruction) so that it
|
|
can be restored when execution halts.
|
|
|
|
ILOCK
|
|
Use the Icache locking feature to lock a "break" instruction into the
|
|
Icache at the specified address.
|
|
|
|
HW
|
|
Program the hardware breakpoint register to generate an exception when
|
|
execution reaches the specified address.
|
|
|
|
When an exception is encountered, the MIPS processor
|
|
passes control to the General Exception Vector. The Monitor
|
|
then restores the previous contents of all breakpoints, and transfers
|
|
control to the prompt.
|
|
|
|
Thus, if the memory is inspected, the break instructions will never
|
|
be seen, as they are only present in memory during execution of the
|
|
application program.
|
|
|
|
The only exception to this is if the program hangs in such a way as to
|
|
require the user to press reset on the target system. In this case the
|
|
Monitor will "forget" that breakpoints had been set, and so you will
|
|
see any RAM breakpoints as break instructions in memory. At this point
|
|
the application program must be re-downloaded to obtain correct
|
|
execution.
|
|
|
|
Diagram showing how breakpoints work in the SerialIce1 DLL
|
|
|
|
ab_cmd ----setHwdbpt------+
|
|
' | +--------+
|
|
setbp -----------+ '''''''|''''''''| |
|
|
| | | Bpt[] |
|
|
when ------------+ | | |
|
|
| '''''|''''''''| |
|
|
v ' | +--------+
|
|
setTrigger ---+
|
|
|
|
|
trace (sstep) -------------+
|
|
|
|
|
c temp --------------------+
|
|
|
|
|
g . temp ------------------+ [imon95]
|
|
|
|
|
.................................................................
|
|
|
|
|
ibpt32 | [serialice1.dll]
|
|
| |
|
|
v |
|
|
ibpt32m -------------------+
|
|
|
|
|
dbpt32 |
|
|
| |
|
|
v |
|
|
dbpt32m -------------------+
|
|
|
|
|
| +-----------+
|
|
v | |
|
|
setbp_target '''''''''''| brkList[] |
|
|
| | | |
|
|
v | +-----------+
|
|
brkInstall |
|
|
v
|
|
brkRemove
|
|
|
|
��������������������������������������������������������������������������������
|
|
Navigation:
|
|
Document Home |
|
|
Document Contents |
|
|
Document Index
|
|
|
|
|