mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-29 20:03:33 +08:00
[0.0 -> 0.1 ] integrated : dbgevent.h
git-svn-id: https://pykd.svn.codeplex.com/svn@70330 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
db85aad76a
commit
e98bf3e1c2
129
pykd/dbgevent.h
Normal file
129
pykd/dbgevent.h
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// user-customizing debug event handler
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "dbgeventcb.h"
|
||||||
|
#include "dbgmodule.h"
|
||||||
|
#include "pyaux.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class debugEvent : public DebugBaseEventCallbacks
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
debugEvent();
|
||||||
|
|
||||||
|
virtual ~debugEvent();
|
||||||
|
|
||||||
|
virtual ULONG onBreakpoint(boost::python::dict &/*bpParameters*/) = 0;
|
||||||
|
|
||||||
|
virtual ULONG onException(boost::python::dict &/*exceptData*/) = 0;
|
||||||
|
|
||||||
|
virtual ULONG onLoadModule(const dbgModuleClass &/* module */) = 0;
|
||||||
|
|
||||||
|
virtual ULONG onUnloadModule(const dbgModuleClass &/* module */) = 0;
|
||||||
|
|
||||||
|
virtual ULONG onChangeSessionStatus( ULONG status ) = 0;
|
||||||
|
|
||||||
|
virtual ULONG onChangeDebugeeState() = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
STDMETHOD_(ULONG, AddRef)() { return 1; }
|
||||||
|
STDMETHOD_(ULONG, Release)() { return 1; }
|
||||||
|
|
||||||
|
STDMETHOD(GetInterestMask)(
|
||||||
|
__out PULONG Mask
|
||||||
|
);
|
||||||
|
|
||||||
|
STDMETHOD(Breakpoint)(
|
||||||
|
__in PDEBUG_BREAKPOINT Bp
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
STDMETHOD(Exception)(
|
||||||
|
__in PEXCEPTION_RECORD64 Exception,
|
||||||
|
__in ULONG FirstChance
|
||||||
|
);
|
||||||
|
|
||||||
|
STDMETHOD(LoadModule)(
|
||||||
|
__in ULONG64 ImageFileHandle,
|
||||||
|
__in ULONG64 BaseOffset,
|
||||||
|
__in ULONG ModuleSize,
|
||||||
|
__in PCSTR ModuleName,
|
||||||
|
__in PCSTR ImageName,
|
||||||
|
__in ULONG CheckSum,
|
||||||
|
__in ULONG TimeDateStamp
|
||||||
|
);
|
||||||
|
|
||||||
|
STDMETHOD(UnloadModule)(
|
||||||
|
__in PCSTR ImageBaseName,
|
||||||
|
__in ULONG64 BaseOffset
|
||||||
|
);
|
||||||
|
|
||||||
|
STDMETHOD(SessionStatus)(
|
||||||
|
__in ULONG Status
|
||||||
|
);
|
||||||
|
|
||||||
|
STDMETHOD(ChangeDebuggeeState)(
|
||||||
|
__in ULONG Flags,
|
||||||
|
__in ULONG64 Argument );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
IDebugClient *m_debugClient;
|
||||||
|
};
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class debugEventWrap : public boost::python::wrapper<debugEvent>, public debugEvent
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
ULONG onBreakpoint(boost::python::dict &bpParameters) {
|
||||||
|
return handler<boost::python::dict &>("onBreakpoint", bpParameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG onException(boost::python::dict &exceptData) {
|
||||||
|
return handler<boost::python::dict &>("onException", exceptData);
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG onLoadModule(const dbgModuleClass &module) {
|
||||||
|
return handler<const dbgModuleClass &>("onLoadModule", module );
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG onUnloadModule(const dbgModuleClass &module) {
|
||||||
|
return handler<const dbgModuleClass &>("onUnloadModule", module );
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG onChangeSessionStatus( ULONG status ) {
|
||||||
|
return handler( "onChangeSessionStatus", status );
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG onChangeDebugeeState() {
|
||||||
|
return handler( "onChangeDebugeeState" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
template<typename Arg1Type>
|
||||||
|
ULONG handler( const char* handlerName, Arg1Type arg1 )
|
||||||
|
{
|
||||||
|
if (boost::python::override pythonHandler = get_override( handlerName ))
|
||||||
|
return pythonHandler(arg1);
|
||||||
|
|
||||||
|
return DEBUG_STATUS_NO_CHANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG handler( const char* handlerName )
|
||||||
|
{
|
||||||
|
if (boost::python::override pythonHandler = get_override( handlerName ))
|
||||||
|
return pythonHandler();
|
||||||
|
|
||||||
|
return DEBUG_STATUS_NO_CHANGE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
Loading…
Reference in New Issue
Block a user