2013-10-29 13:49:55 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "kdlib/windbg.h"
|
|
|
|
|
2013-12-17 15:49:24 +08:00
|
|
|
#include "pythreadstate.h"
|
2013-10-29 13:49:55 +08:00
|
|
|
|
|
|
|
namespace pykd {
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
class DbgOut : public kdlib::windbg::WindbgOut
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
void flush() {
|
|
|
|
}
|
|
|
|
|
|
|
|
std::wstring encoding() {
|
|
|
|
return L"ascii";
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
class DbgIn : public kdlib::windbg::WindbgIn
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
std::wstring readline() {
|
|
|
|
AutoRestorePyState pystate;
|
|
|
|
return kdlib::windbg::WindbgIn::readline();
|
|
|
|
}
|
|
|
|
|
|
|
|
std::wstring encoding() {
|
|
|
|
return L"ascii";
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2013-11-13 15:11:40 +08:00
|
|
|
class SysDbgOut : public DbgOut
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
virtual void write( const std::wstring& str) {
|
|
|
|
python::object sys = python::import("sys");
|
|
|
|
sys.attr("stdout").attr("write")( str );
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void writedml( const std::wstring& str) {
|
|
|
|
write(str);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
class SysDbgIn : public DbgIn
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
virtual std::wstring readline() {
|
|
|
|
python::object sys = python::import("sys");
|
|
|
|
return python::extract<std::wstring>( sys.attr("stdin").attr("readline") );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2013-10-29 13:49:55 +08:00
|
|
|
}
|