2012-01-25 22:34:18 +08:00
|
|
|
//
|
|
|
|
// Stack frame: DEBUG_STACK_FRAME wrapper
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "stkframe.h"
|
2012-08-08 16:01:25 +08:00
|
|
|
#include "dbgengine.h"
|
2012-01-25 22:34:18 +08:00
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
namespace pykd {
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2012-08-08 16:01:25 +08:00
|
|
|
StackFrame::StackFrame( const STACK_FRAME_DESC& desc )
|
2012-01-25 22:34:18 +08:00
|
|
|
{
|
2012-08-08 16:01:25 +08:00
|
|
|
m_frameNumber = desc.number;
|
|
|
|
m_instructionOffset = desc.instructionOffset;
|
|
|
|
m_returnOffset = desc.returnOffset;
|
|
|
|
m_frameOffset = desc.frameOffset;
|
|
|
|
m_stackOffset = desc.stackOffset;
|
2012-01-25 22:34:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
std::string StackFrame::print() const
|
|
|
|
{
|
|
|
|
std::stringstream sstream;
|
|
|
|
|
|
|
|
sstream << std::dec << "(" << m_frameNumber << ")";
|
|
|
|
|
|
|
|
sstream << " ip= 0x" << std::hex << m_instructionOffset;
|
|
|
|
sstream << ", ret= 0x" << std::hex << m_returnOffset;
|
|
|
|
sstream << ", frame= 0x" << std::hex << m_frameOffset;
|
|
|
|
sstream << ", stack= 0x" << std::hex << m_stackOffset;
|
|
|
|
|
|
|
|
return sstream.str();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2012-08-08 16:01:25 +08:00
|
|
|
python::list getCurrentStack()
|
2012-01-25 22:34:18 +08:00
|
|
|
{
|
2012-08-08 16:01:25 +08:00
|
|
|
ULONG frameCount = getStackTraceFrameCount();
|
|
|
|
|
|
|
|
std::vector<STACK_FRAME_DESC> frames(frameCount);
|
|
|
|
|
|
|
|
getStackTrace( &frames[0], frameCount );
|
|
|
|
|
|
|
|
python::list frameList;
|
|
|
|
|
|
|
|
for ( ULONG i = 0; i < frameCount; ++i )
|
|
|
|
{
|
|
|
|
python::object frameObj( StackFrame( frames.at(i) ) );
|
|
|
|
|
|
|
|
frameList.append( frameObj );
|
|
|
|
}
|
|
|
|
|
|
|
|
return frameList;
|
2012-01-25 22:34:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
} // namespace pykd
|
|
|
|
|
2012-08-08 16:01:25 +08:00
|
|
|
|
2012-01-25 22:34:18 +08:00
|
|
|
|