From 2599f9885fb85f59d904fa466935cce99ee21fe4 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Mon, 22 Nov 2010 07:47:59 +0000 Subject: [PATCH] [!] bug fixed: issue #7697 ( raw_input does not work ) git-svn-id: https://pykd.svn.codeplex.com/svn@57920 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgext.cpp | 25 ++++++++++++++++++++++++- pykd/dbginput.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 pykd/dbginput.h 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: + + +}; + +///////////////////////////////////////////////////////////////////////////////// +