[0.1.x] added : breakin routine

git-svn-id: https://pykd.svn.codeplex.com/svn@71390 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2011-11-16 09:20:41 +00:00 committed by Mikhail I. Izmestev
parent fff5521dc0
commit 6d33eb5286
3 changed files with 35 additions and 149 deletions

View File

@ -44,6 +44,8 @@ public:
ULONG64 addr64( ULONG64 addr );
void breakin();
DbgOut dout() {
return DbgOut( m_client );
}

View File

@ -132,149 +132,25 @@ evaluate( const std::wstring &expression )
/////////////////////////////////////////////////////////////////////////////////
void DebugClient::breakin()
{
HRESULT hres;
PyThreadState *pystate = PyEval_SaveThread();
hres = m_control->SetInterrupt( DEBUG_INTERRUPT_ACTIVE );
PyEval_RestoreThread( pystate );
if ( FAILED( hres ) )
throw DbgException( "IDebugControl::SetInterrupt" );
}
void breakin()
{
g_dbgClient->breakin();
}
/////////////////////////////////////////////////////////////////////////////////
} // end namespace pykd
//#include <boost/format.hpp>
//
//#include "dbgext.h"
//#include "dbgcmd.h"
//#include "dbgexcept.h"
//#include "dbgio.h"
//#include "dbgsystem.h"
/////////////////////////////////////////////////////////////////////////////////
//
//std::string
//dbgCommand( const std::wstring &command )
//{
// HRESULT hres;
//
// OutputReader outReader( dbgExt->client );
// {
// PyThread_StateRestore pyThreadRestore;
//
// hres = dbgExt->control4->ExecuteWide( DEBUG_OUTCTL_THIS_CLIENT, command.c_str(), 0 );
// }
// if ( FAILED( hres ) )
// throw DbgException( "IDebugControl::Execute failed" );
//
// return std::string( outReader.Line() );
//}
//
/////////////////////////////////////////////////////////////////////////////////
//
//dbgExtensionClass::dbgExtensionClass( const char* path ) : m_path(path)
//{
// HRESULT hres;
//
// hres = dbgExt->control->AddExtension( path, 0, &m_handle );
// if ( FAILED( hres ) )
// throw DbgException( "IDebugControl::AddExtension failed" );
//}
//
/////////////////////////////////////////////////////////////////////////////////
//
//dbgExtensionClass::~dbgExtensionClass()
//{
// if ( m_handle )
// dbgExt->control->RemoveExtension( m_handle );
//}
//
/////////////////////////////////////////////////////////////////////////////////
//
//std::string
//dbgExtensionClass::call( const std::string &command, const std::string params )
//{
// HRESULT hres;
//
// OutputReader outReader( dbgExt->client );
//
// hres = dbgExt->control->CallExtension( m_handle, command.c_str(), params.c_str() );
// if ( FAILED( hres ) )
// throw DbgException( "IDebugControl::CallExtension failed" );
//
// return std::string( outReader.Line() );
//}
//
/////////////////////////////////////////////////////////////////////////////////
//
//std::string
//dbgExtensionClass::print() const
//{
// return m_handle ? m_path : "";
//}
//
/////////////////////////////////////////////////////////////////////////////////
//
//ULONG64
//evaluate( const std::string &expression )
//{
// HRESULT hres;
// ULONG64 value = 0;
//
// DEBUG_VALUE debugValue = {};
// ULONG remainderIndex = 0;
//
// if ( is64bitSystem() )
// {
// hres = dbgExt->control->Evaluate(
// expression.c_str(),
// DEBUG_VALUE_INT64,
// &debugValue,
// &remainderIndex );
//
// if ( FAILED( hres ) )
// throw DbgException( "IDebugControl::Evaluate failed" );
//
// if ( remainderIndex == expression.length() )
// value = debugValue.I64;
// }
// else
// {
// hres = dbgExt->control->Evaluate(
// expression.c_str(),
// DEBUG_VALUE_INT32,
// &debugValue,
// &remainderIndex );
//
// if ( FAILED( hres ) )
// throw DbgException( "IDebugControl::Evaluate failed" );
//
// if ( remainderIndex == expression.length() )
// value = debugValue.I32;
// }
//
// return value;
//}
//
/////////////////////////////////////////////////////////////////////////////////
//
//void
//breakin()
//{
// HRESULT hres;
//
// {
// PyThread_StateRestore pyThreadRestore;
// hres = dbgExt->control->SetInterrupt( DEBUG_INTERRUPT_ACTIVE );
// }
//
// if ( FAILED( hres ) )
// throw DbgException( "IDebugControl::SetInterrupt" );
//}
//
/////////////////////////////////////////////////////////////////////////////////

View File

@ -166,13 +166,17 @@ BOOST_PYTHON_MODULE( pykd )
.def( "__hex__", &intBase::hex );
python::class_<pykd::DebugClient, pykd::DebugClientPtr>("dbgClient", "Class representing a debugging session", python::no_init )
.def( "loadDump", &pykd::DebugClient::loadDump,
.def( "addr64", &DebugClient::addr64,
"Extend address to 64 bits formats" )
.def( "breakin", &DebugClient::breakin,
"Break into debugger" )
.def( "loadDump", &DebugClient::loadDump,
"Load crash dump" )
.def( "startProcess", &pykd::DebugClient::startProcess,
.def( "startProcess", &DebugClient::startProcess,
"Start process for debugging" )
.def( "attachProcess", &pykd::DebugClient::attachProcess,
.def( "attachProcess", &DebugClient::attachProcess,
"Attach debugger to a exsisting process" )
.def( "attachKernel", &pykd::DebugClient::attachKernel,
.def( "attachKernel", &DebugClient::attachKernel,
"Attach debugger to a target's kernel" )
.def( "expr", &pykd::DebugClient::evaluate,
"Evaluate windbg expression" )
@ -251,6 +255,10 @@ BOOST_PYTHON_MODULE( pykd )
.def( "waitForEvent", &pykd::DebugClient::waitForEvent,
"Wait for events that breaks into the debugger" );
python::def( "addr64", &addr64,
"Extend address to 64 bits formats" );
python::def( "breakin", &breakin,
"Break into debugger" );
python::def( "createDbgClient", (DebugClientPtr(*)())&pykd::DebugClient::createDbgClient,
"create a new instance of the dbgClient class" );
python::def( "loadDump", &pykd::loadDump,