public int InsertBreakpoint(Inferior inferior, BreakpointHandle handle,
TargetAddress address, int domain)
{
Lock ();
try {
int index;
bool is_enabled;
BreakpointHandle old = LookupBreakpoint (
address, out index, out is_enabled);
if (old != null)
throw new TargetException (
TargetError.AlreadyHaveBreakpoint,
"Already have breakpoint {0} at address {1}.",
old.Breakpoint.Index, address);
int dr_index = -1;
switch (handle.Breakpoint.Type) {
case EventType.Breakpoint:
index = inferior.InsertBreakpoint (address);
break;
case EventType.WatchRead:
index = inferior.InsertHardwareWatchPoint (
address, Inferior.HardwareBreakpointType.READ,
out dr_index);
break;
case EventType.WatchWrite:
index = inferior.InsertHardwareWatchPoint (
address, Inferior.HardwareBreakpointType.WRITE,
out dr_index);
break;
default:
throw new InternalError ();
}
index_hash.Add (index, new BreakpointEntry (handle, domain));
return index;
} finally {
Unlock ();
}
}