mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-19 19:13:22 +08:00
[0.0 -> 0.1 ] integrated dbgcmd.cpp
git-svn-id: https://pykd.svn.codeplex.com/svn@70291 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
878c6d0191
commit
aea113947f
132
pykd/dbgcmd.cpp
Normal file
132
pykd/dbgcmd.cpp
Normal file
@ -0,0 +1,132 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#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" );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
Loading…
Reference in New Issue
Block a user