[0.3.x] added : removeAllBp routine ( Remove all breakpoints )

git-svn-id: https://pykd.svn.codeplex.com/svn@90876 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2015-12-03 07:36:40 +00:00 committed by Mikhail I. Izmestev
parent 1d25e61d02
commit fe84574b79
4 changed files with 30 additions and 5 deletions

View File

@ -700,6 +700,18 @@ void Breakpoint::removeBreakpointByIndex(unsigned long index)
///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////
void Breakpoint::removeAllBreakpoints()
{
AutoRestorePyState pystate;
while (kdlib::getNumberBreakpoints() > 0)
{
kdlib::BreakpointPtr bp = kdlib::getBreakpointByIndex(0);
bp->remove();
}
}
/////////////////////////////////////////////////////////////////////////////////
} // end namespace pykd } // end namespace pykd

View File

@ -66,6 +66,8 @@ public:
static void removeBreakpointByIndex(unsigned long index); static void removeBreakpointByIndex(unsigned long index);
static void removeAllBreakpoints();
public: public:
explicit Breakpoint(kdlib::BreakpointPtr bp, bool weakbp = true); explicit Breakpoint(kdlib::BreakpointPtr bp, bool weakbp = true);

View File

@ -389,12 +389,14 @@ BOOST_PYTHON_MODULE( pykd )
setSoftwareBreakpoint_( python::args( "offset", "callback" ),"Set software breakpoint on executiont" )[python::return_value_policy<python::manage_new_object>()]); setSoftwareBreakpoint_( python::args( "offset", "callback" ),"Set software breakpoint on executiont" )[python::return_value_policy<python::manage_new_object>()]);
python::def( "setBp", &Breakpoint::setHardwareBreakpoint, python::def( "setBp", &Breakpoint::setHardwareBreakpoint,
setHardwareBreakpoint_( python::args( "offset", "size", "accsessType", "callback" ),"Set hardware breakpoint")[python::return_value_policy<python::manage_new_object>()]); setHardwareBreakpoint_( python::args( "offset", "size", "accsessType", "callback" ),"Set hardware breakpoint")[python::return_value_policy<python::manage_new_object>()]);
python::def( "getNumberBreakpoints", &Breakpoint::getNumberBreakpoints, python::def("getNumberBreakpoints", &Breakpoint::getNumberBreakpoints,
"Return number of breakpoints in the current process" ); "Return number of breakpoints in the current process" );
python::def( "getBp", &Breakpoint::getBreakpointByIndex, python::return_value_policy<python::manage_new_object>(), python::def( "getBp", &Breakpoint::getBreakpointByIndex, python::return_value_policy<python::manage_new_object>(),
"Return breakpoint object by index"); "Return breakpoint object by index");
python::def("removeBp", &Breakpoint::removeBreakpointByIndex, python::def("removeBp", &Breakpoint::removeBreakpointByIndex,
"Remove breakpoint by index"); "Remove breakpoint by index");
python::def("removeAllBp", &Breakpoint::removeAllBreakpoints,
"Remove all breakpoints");
// processes and threads // processes and threads
python::def ( "getNumberProcesses", pykd::getNumberProcesses, python::def ( "getNumberProcesses", pykd::getNumberProcesses,

View File

@ -44,16 +44,25 @@ class BreakpointTest( unittest.TestCase ):
bp.remove() bp.remove()
self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() ) self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
def testDeleteBp(self):
bp = pykd.setBp( self.targetModule.CdeclFunc )
del bp
self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
def testRemoveByIndex(self): def testRemoveByIndex(self):
bp1 = pykd.setBp( self.targetModule.CdeclFunc ) bp1 = pykd.setBp( self.targetModule.CdeclFunc )
bp2 = pykd.getBp(0) bp2 = pykd.getBp(0)
bp2.remove() bp2.remove()
self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() ) self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
def disable_testDeleteBp(self): def testRemoveAllBp(self):
bp = pykd.setBp( self.targetModule.CdeclFunc ) bp1 = pykd.setBp( self.targetModule.CdeclFunc )
del bp bp2 = pykd.setBp( self.targetModule.CdeclFunc + 1)
self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() ) bp3 = pykd.setBp( self.targetModule.CdeclFunc + 2 )
self.assertEqual( 3, pykd.getNumberBreakpoints() )
pykd.removeAllBp()
self.assertEqual( 0, pykd.getNumberBreakpoints() )
self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
def testBreakCallback(self): def testBreakCallback(self):
breakCount = callCounter(stopOnBreak) breakCount = callCounter(stopOnBreak)