diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 343331c..be0dbdb 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -521,7 +521,7 @@ BOOST_PYTHON_MODULE( pykd ) "Return current thread" ) .def("getNumberBreakpoints", TargetProcessAdapter::getNumberBreakpoints, "Return number of breakpoints for this process" ) - .def("breakpoint", TargetProcessAdapter::getBreakpointByIndex, + .def("breakpoint", TargetProcessAdapter::getBreakpointByIndex, python::return_value_policy<python::manage_new_object>(), "Return a breakpoint by it's index" ) ; diff --git a/pykd/pyprocess.h b/pykd/pyprocess.h index 8d8c3c7..df5bfd3 100644 --- a/pykd/pyprocess.h +++ b/pykd/pyprocess.h @@ -3,6 +3,7 @@ #include <kdlib/process.h> #include "pythreadstate.h" +#include "pyeventhandler.h" namespace pykd { @@ -68,10 +69,16 @@ struct TargetProcessAdapter { return process.getNumberBreakpoints(); } - static kdlib::BreakpointPtr getBreakpointByIndex(kdlib::TargetProcess& process, unsigned long index) + static Breakpoint* getBreakpointByIndex(kdlib::TargetProcess& process, unsigned long index) { - AutoRestorePyState pystate; - return process.getBreakpoint(index); + kdlib::BreakpointPtr bp; + + { + AutoRestorePyState pystate; + bp = process.getBreakpoint(index); + } + + return new Breakpoint(bp); } }; diff --git a/test/scripts/targetprocess.py b/test/scripts/targetprocess.py index f7fd8d8..a33e3fe 100644 --- a/test/scripts/targetprocess.py +++ b/test/scripts/targetprocess.py @@ -42,6 +42,10 @@ class ProcessTest(unittest.TestCase): thread = proc.thread(i) thread.setCurrent() + def testGetBreakpoint(self): + proc = pykd.targetProcess.getCurrent() + self.assertEqual(0, proc.getNumberBreakpoints()) +