Posted on Mar 13, 2009 by
Helpful Camel
The hardware breakpoint handler is executed only once and then the debugger stops the application.
Seems like the single step exception handler does not reset _restore_breakpoint properly. The next changes to pydbg.py worked for me.
========================================= --- pydbg.py.orig 2009-03-12 22:41:02.000000000 -0400 +++ pydbg.py 2009-03-12 22:51:45.000000000 -0400 @@ -1698,7 +1698,10 @@
else:
continue_status = DBG_EXCEPTION_NOT_HANDLED
reset restore breakpoint variable.
- self._restore_breakpoint = None
exists, ie: the user didn't erase it during the # callback, and the breakpoint is flagged for restore, then tell the single step handler about it. furthermore, # check if the debugger is still active, that way we don't try and single step if the user requested a detach. @@ -1714,11 +1717,11 @@ self._restore_breakpoint = prev self.single_step(True)# if we are handling a hardware breakpoint hit and it still
+ self.bp_del_hw(slot=prev.slot)
reset the hardware breakpoint hit flag and restore breakpoint
variable.- self.hardware_breakpoint_hit = None
- self._restore_breakpoint = None
reset the hardware breakpoint hit flag.
f.hardware_breakpoint_hit = None
return continue_status
Status: New
Labels:
Type-Defect
Priority-Medium