diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp index 6a64f5b..a98d1ab 100644 --- a/pykd/dbgext.cpp +++ b/pykd/dbgext.cpp @@ -42,7 +42,19 @@ class WindbgGlobalSession public: WindbgGlobalSession() { + + boost::python::import( "pykd" ); + main = boost::python::import("__main__"); + + // перенаправление стандартных потоков ВВ + boost::python::object sys = boost::python::import( "sys"); + + dbgOut dout; + sys.attr("stdout") = boost::python::object( dout ); + + dbgIn din; + sys.attr("stdin") = boost::python::object( din ); } boost::python::object @@ -217,11 +229,20 @@ py( PDEBUG_CLIENT4 client, PCSTR args) SetupDebugEngine( client, &ext ); dbgExt = &ext; + boost::python::import( "pykd" ); + boost::python::object main = boost::python::import("__main__"); boost::python::object global(main.attr("__dict__")); + + // перенаправление стандартных потоков ВВ + boost::python::object sys = boost::python::import( "sys"); + + dbgOut dout; + sys.attr("stdout") = boost::python::object( dout ); - boost::python::object result; + dbgIn din; + sys.attr("stdin") = boost::python::object( din ); // разбор параметров typedef boost::escaped_list_separator char_separator_t; @@ -274,6 +295,8 @@ py( PDEBUG_CLIENT4 client, PCSTR args) SetCurrentDirectoryA( filePath.c_str() ); try { + + boost::python::object result; result = boost::python::exec_file( fullFileName.c_str(), global, global ); diff --git a/pykd/dbginput.h b/pykd/dbginput.h new file mode 100644 index 0000000..d23ce44 --- /dev/null +++ b/pykd/dbginput.h @@ -0,0 +1,46 @@ +#pragma once + +#include "dbgprint.h" + +///////////////////////////////////////////////////////////////////////////////// + +class dbgOut { + +public: + + void + write( const std::string& str ) { + DbgPrint::dprint( str ); + } + +private: + + +}; + +///////////////////////////////////////////////////////////////////////////////// + +class dbgIn { + +public: + + std::string + readline() { + + char str[100]; + ULONG inputSize; + + OutputReader outputReader( dbgExt->client ); + + dbgExt->control->Input( str, sizeof(str), &inputSize ); + + return std::string( str ); + } + +private: + + +}; + +///////////////////////////////////////////////////////////////////////////////// +