From c89fc1f823d3cce5c48e1e7f047e5efc87ed9548 Mon Sep 17 00:00:00 2001 From: "SND\\ussrhero_cp" <SND\ussrhero_cp@9b283d60-5439-405e-af05-b73fd8c4d996> Date: Sun, 4 Jan 2015 09:55:16 +0000 Subject: [PATCH] [0.3.x] added : getFrameNumber ( return current frame number ) [0.3.x] added : eventHandler::onChangeBreakpoints ( Breakpoints is changed for current process ) git-svn-id: https://pykd.svn.codeplex.com/svn@89566 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/packages.pykd_vc120.config | 4 ++ pykd/pycpucontext.h | 5 ++ pykd/pyeventhandler.cpp | 22 ++++++++ pykd/pyeventhandler.h | 1 + pykd/pykd_vc120.vcxproj | 2 +- pykd/pykd_vc120.vcxproj.filters | 99 +++++++++++++++++++++++++++++++++ pykd/pymod.cpp | 4 ++ 7 files changed, 136 insertions(+), 1 deletion(-) diff --git a/pykd/packages.pykd_vc120.config b/pykd/packages.pykd_vc120.config index ceb9eb5..a29ebfd 100644 --- a/pykd/packages.pykd_vc120.config +++ b/pykd/packages.pykd_vc120.config @@ -1,6 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="boost" version="1.57.0.0" targetFramework="Native" /> + <package id="boost_chrono" version="1.57.0.0" targetFramework="Native" /> + <package id="boost_date_time" version="1.57.0.0" targetFramework="Native" /> <package id="boost_python" version="1.57.0.0" targetFramework="Native" /> + <package id="boost_system" version="1.57.0.0" targetFramework="Native" /> + <package id="boost_thread" version="1.57.0.0" targetFramework="Native" /> <package id="Python27" version="2.7.6" targetFramework="Native" /> </packages> \ No newline at end of file diff --git a/pykd/pycpucontext.h b/pykd/pycpucontext.h index 0763d93..8ea2eed 100644 --- a/pykd/pycpucontext.h +++ b/pykd/pycpucontext.h @@ -108,6 +108,11 @@ inline kdlib::StackFramePtr getCurrentFrame() { return kdlib::getCurrentStackFrame(); } +inline unsigned long getCurrentFrameNumber() { + AutoRestorePyState pystate; + return kdlib::getCurrentStackFrameNumber(); +} + inline void setCurrentFrame( kdlib::StackFramePtr& stackFrame) { AutoRestorePyState pystate; kdlib::setCurrentStackFrame(stackFrame); diff --git a/pykd/pyeventhandler.cpp b/pykd/pyeventhandler.cpp index 66e47b1..7da46a5 100644 --- a/pykd/pyeventhandler.cpp +++ b/pykd/pyeventhandler.cpp @@ -286,6 +286,28 @@ void EventHandler::onChangeLocalScope() ///////////////////////////////////////////////////////////////////////////////// +void EventHandler::onChangeBreakpoints() +{ + PyEval_RestoreThread(m_pystate); + + try { + + python::override pythonHandler = get_override("onChangeBreakpoints"); + if (pythonHandler) + { + pythonHandler(); + } + } + catch (const python::error_already_set &) + { + printException(); + } + + m_pystate = PyEval_SaveThread(); +} + +///////////////////////////////////////////////////////////////////////////////// + void EventHandler::onDebugOutput(const std::wstring& text) { PyEval_RestoreThread( m_pystate ); diff --git a/pykd/pyeventhandler.h b/pykd/pyeventhandler.h index ebdb7fa..e5db4c7 100644 --- a/pykd/pyeventhandler.h +++ b/pykd/pyeventhandler.h @@ -35,6 +35,7 @@ public: virtual kdlib::DebugCallbackResult onModuleUnload( kdlib::MEMOFFSET_64 offset, const std::wstring &name ); virtual void onCurrentThreadChange(kdlib::THREAD_DEBUG_ID threadid); virtual void onChangeLocalScope(); + virtual void onChangeBreakpoints(); virtual void onDebugOutput(const std::wstring& text); private: diff --git a/pykd/pykd_vc120.vcxproj b/pykd/pykd_vc120.vcxproj index 9d7fcf8..854bba2 100644 --- a/pykd/pykd_vc120.vcxproj +++ b/pykd/pykd_vc120.vcxproj @@ -69,7 +69,7 @@ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <PropertyGroup Label="UserMacros"> - <NuGetPackageImportStamp>445589a8</NuGetPackageImportStamp> + <NuGetPackageImportStamp>50e91edb</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|Win32'"> <LinkIncremental>true</LinkIncremental> diff --git a/pykd/pykd_vc120.vcxproj.filters b/pykd/pykd_vc120.vcxproj.filters index 146649a..f125f69 100644 --- a/pykd/pykd_vc120.vcxproj.filters +++ b/pykd/pykd_vc120.vcxproj.filters @@ -113,6 +113,105 @@ <ClCompile Include="pyeventhandler.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\converter\boost_python.converter.arg_to_python_base.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\converter\boost_python.converter.builtin_converters.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\converter\boost_python.converter.from_python.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\converter\boost_python.converter.registry.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\converter\boost_python.converter.type_id.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.class.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.enum.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.function.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.function_doc_signature.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.inheritance.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.iterator.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.life_support.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.pickle_support.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\object\boost_python.object.stl_iterator.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.dict.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.errors.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.exec.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.import.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.list.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.long.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.module.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.numeric.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.object_operators.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.object_protocol.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.slice.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.str.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.tuple.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_python.wrapper.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\win32\boost_thread.win32.thread.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\win32\boost_thread.win32.tss_dll.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\win32\boost_thread.win32.tss_pe.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_thread.future.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\boost_thread.tss_null.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <None Include="pykd.def"> diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 713cb3c..4e34eff 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -355,6 +355,8 @@ BOOST_PYTHON_MODULE( pykd ) "Return a current stack as a list of stackFrame objects" ); python::def( "getFrame", pykd::getCurrentFrame, "Return a current stack frame" ); + python::def("getFrameNumber", pykd::getCurrentFrameNumber, + "Return current frame number"); python::def( "setFrame", pykd::setCurrentFrame, "Change current local scope" ); python::def( "setFrame", pykd::setCurrentFrameByIndex, @@ -901,6 +903,8 @@ BOOST_PYTHON_MODULE( pykd ) .def( "onChangeLocalScope", &EventHandler::onChangeLocalScope, "The current local scope has been changed.\n" "There is no return value" ) + .def("onChangeBreakpoints", &EventHandler::onChangeBreakpoints, + "Breakpoints is changed for current process" ) .def( "onDebugOutput", &EventHandler::onDebugOutput, "Request debug output" );