mirror of https://github.com/mgba-emu/mgba.git
Debugger: Print break-/watchpoint ID when breaking in CLI
This commit is contained in:
parent
f213488089
commit
bb1ce789d2
3
CHANGES
3
CHANGES
|
@ -107,8 +107,9 @@ Other fixes:
|
|||
- Qt: Fix sprite view using wrong base address (fixes mgba.io/i/1603)
|
||||
Misc:
|
||||
- GB Memory: Support manual SRAM editing (fixes mgba.io/i/1580)
|
||||
- SDL: Use controller GUID instead of name
|
||||
- Debugger: Separate aliases from main commands
|
||||
- Debugger: Print break-/watchpoint ID when breaking in CLI
|
||||
- SDL: Use controller GUID instead of name
|
||||
|
||||
0.8 beta 1: (2019-10-20)
|
||||
- Initial beta for 0.8
|
||||
|
|
|
@ -69,6 +69,7 @@ struct mDebuggerEntryInfo {
|
|||
enum mBreakpointType breakType;
|
||||
} bp;
|
||||
} type;
|
||||
ssize_t pointId;
|
||||
};
|
||||
|
||||
struct mBreakpoint {
|
||||
|
|
|
@ -60,7 +60,8 @@ static void ARMDebuggerCheckBreakpoints(struct mDebuggerPlatform* d) {
|
|||
}
|
||||
struct mDebuggerEntryInfo info = {
|
||||
.address = breakpoint->d.address,
|
||||
.type.bp.breakType = BREAKPOINT_HARDWARE
|
||||
.type.bp.breakType = BREAKPOINT_HARDWARE,
|
||||
.pointId = breakpoint->d.id
|
||||
};
|
||||
mDebuggerEnter(d->p, DEBUGGER_ENTER_BREAKPOINT, &info);
|
||||
}
|
||||
|
@ -142,6 +143,7 @@ static void ARMDebuggerEnter(struct mDebuggerPlatform* platform, enum mDebuggerE
|
|||
struct ARMDebugBreakpoint* breakpoint = _lookupBreakpoint(&debugger->swBreakpoints, _ARMPCAddress(cpu));
|
||||
if (breakpoint && breakpoint->d.type == BREAKPOINT_SOFTWARE) {
|
||||
info->address = breakpoint->d.address;
|
||||
info->pointId = breakpoint->d.id;
|
||||
if (debugger->clearSoftwareBreakpoint) {
|
||||
debugger->clearSoftwareBreakpoint(debugger, breakpoint);
|
||||
}
|
||||
|
|
|
@ -121,6 +121,7 @@ static bool _checkWatchpoints(struct ARMDebugger* debugger, uint32_t address, st
|
|||
info->address = address;
|
||||
info->type.wp.watchType = watchpoint->type;
|
||||
info->type.wp.accessType = type;
|
||||
info->pointId = watchpoint->id;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -976,7 +976,11 @@ static void _reportEntry(struct mDebugger* debugger, enum mDebuggerEntryReason r
|
|||
break;
|
||||
case DEBUGGER_ENTER_BREAKPOINT:
|
||||
if (info) {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit breakpoint at 0x%08X\n", info->address);
|
||||
if (info->pointId > 0) {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit breakpoint %zi at 0x%08X\n", info->pointId, info->address);
|
||||
} else {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit unknown breakpoint at 0x%08X\n", info->address);
|
||||
}
|
||||
} else {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit breakpoint\n");
|
||||
}
|
||||
|
@ -984,9 +988,9 @@ static void _reportEntry(struct mDebugger* debugger, enum mDebuggerEntryReason r
|
|||
case DEBUGGER_ENTER_WATCHPOINT:
|
||||
if (info) {
|
||||
if (info->type.wp.accessType & WATCHPOINT_WRITE) {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit watchpoint at 0x%08X: (new value = 0x%08X, old value = 0x%08X)\n", info->address, info->type.wp.newValue, info->type.wp.oldValue);
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit watchpoint %zi at 0x%08X: (new value = 0x%08X, old value = 0x%08X)\n", info->pointId, info->address, info->type.wp.newValue, info->type.wp.oldValue);
|
||||
} else {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit watchpoint at 0x%08X: (value = 0x%08X)\n", info->address, info->type.wp.oldValue);
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit watchpoint %zi at 0x%08X: (value = 0x%08X)\n", info->pointId, info->address, info->type.wp.oldValue);
|
||||
}
|
||||
} else {
|
||||
cliDebugger->backend->printf(cliDebugger->backend, "Hit watchpoint\n");
|
||||
|
|
|
@ -748,7 +748,8 @@ void GBABreakpoint(struct ARMCore* cpu, int immediate) {
|
|||
if (gba->debugger) {
|
||||
struct mDebuggerEntryInfo info = {
|
||||
.address = _ARMPCAddress(cpu),
|
||||
.type.bp.breakType = BREAKPOINT_SOFTWARE
|
||||
.type.bp.breakType = BREAKPOINT_SOFTWARE,
|
||||
.pointId = -1
|
||||
};
|
||||
mDebuggerEnter(gba->debugger->d.p, DEBUGGER_ENTER_BREAKPOINT, &info);
|
||||
}
|
||||
|
|
|
@ -53,7 +53,8 @@ static void LR35902DebuggerCheckBreakpoints(struct mDebuggerPlatform* d) {
|
|||
}
|
||||
}
|
||||
struct mDebuggerEntryInfo info = {
|
||||
.address = breakpoint->address
|
||||
.address = breakpoint->address,
|
||||
.pointId = breakpoint->id
|
||||
};
|
||||
mDebuggerEnter(d->p, DEBUGGER_ENTER_BREAKPOINT, &info);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ static bool _checkWatchpoints(struct LR35902Debugger* debugger, uint16_t address
|
|||
info->address = address;
|
||||
info->type.wp.watchType = watchpoint->type;
|
||||
info->type.wp.accessType = type;
|
||||
info->pointId = watchpoint->id;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue