From fe84574b79eb85b98e6c615fd996cb1b1feaed91 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Thu, 3 Dec 2015 07:36:40 +0000 Subject: [PATCH] [0.3.x] added : removeAllBp routine ( Remove all breakpoints ) git-svn-id: https://pykd.svn.codeplex.com/svn@90876 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/pyeventhandler.cpp | 12 ++++++++++++ pykd/pyeventhandler.h | 2 ++ pykd/pymod.cpp | 4 +++- test/scripts/breakpoint.py | 17 +++++++++++++---- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/pykd/pyeventhandler.cpp b/pykd/pyeventhandler.cpp index 83707e2..099186e 100644 --- a/pykd/pyeventhandler.cpp +++ b/pykd/pyeventhandler.cpp @@ -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 diff --git a/pykd/pyeventhandler.h b/pykd/pyeventhandler.h index 2d7e716..127409d 100644 --- a/pykd/pyeventhandler.h +++ b/pykd/pyeventhandler.h @@ -66,6 +66,8 @@ public: static void removeBreakpointByIndex(unsigned long index); + static void removeAllBreakpoints(); + public: explicit Breakpoint(kdlib::BreakpointPtr bp, bool weakbp = true); diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index f3bdc62..04b12ae 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -389,12 +389,14 @@ BOOST_PYTHON_MODULE( pykd ) setSoftwareBreakpoint_( python::args( "offset", "callback" ),"Set software breakpoint on executiont" )[python::return_value_policy()]); python::def( "setBp", &Breakpoint::setHardwareBreakpoint, setHardwareBreakpoint_( python::args( "offset", "size", "accsessType", "callback" ),"Set hardware breakpoint")[python::return_value_policy()]); - python::def( "getNumberBreakpoints", &Breakpoint::getNumberBreakpoints, + python::def("getNumberBreakpoints", &Breakpoint::getNumberBreakpoints, "Return number of breakpoints in the current process" ); python::def( "getBp", &Breakpoint::getBreakpointByIndex, python::return_value_policy(), "Return breakpoint object by index"); python::def("removeBp", &Breakpoint::removeBreakpointByIndex, "Remove breakpoint by index"); + python::def("removeAllBp", &Breakpoint::removeAllBreakpoints, + "Remove all breakpoints"); // processes and threads python::def ( "getNumberProcesses", pykd::getNumberProcesses, diff --git a/test/scripts/breakpoint.py b/test/scripts/breakpoint.py index ca9f12e..7023cdf 100644 --- a/test/scripts/breakpoint.py +++ b/test/scripts/breakpoint.py @@ -44,16 +44,25 @@ class BreakpointTest( unittest.TestCase ): bp.remove() 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): bp1 = pykd.setBp( self.targetModule.CdeclFunc ) bp2 = pykd.getBp(0) bp2.remove() self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() ) - def disable_testDeleteBp(self): - bp = pykd.setBp( self.targetModule.CdeclFunc ) - del bp - self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() ) + def testRemoveAllBp(self): + bp1 = pykd.setBp( self.targetModule.CdeclFunc ) + bp2 = pykd.setBp( self.targetModule.CdeclFunc + 1) + 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): breakCount = callCounter(stopOnBreak)