51class StackWalkerInternal;
92 LPCSTR szSymPath = NULL,
93 DWORD dwProcessId = GetCurrentProcessId(),
94 HANDLE hProcess = GetCurrentProcess()
104 LPDWORD lpNumberOfBytesRead,
111 HANDLE hThread = GetCurrentThread(),
112 const CONTEXT *context = NULL,
114 LPVOID pUserData = NULL
145 virtual void OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName);
146 virtual void OnLoadModule(LPCSTR img, LPCSTR mod,
DWORD64 baseAddr, DWORD size, DWORD result, LPCSTR symType, LPCSTR pdbName, ULONGLONG fileVersion);
160 static BOOL __stdcall
myReadProcMem(HANDLE hProcess,
DWORD64 qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead);
178#ifdef CURRENT_THREAD_VIA_EXCEPTION
181#define GET_CURRENT_CONTEXT(c, contextFlags) \
183 memset(&c, 0, sizeof(CONTEXT)); \
184 EXCEPTION_POINTERS *pExp = NULL; \
187 } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \
189 memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \
190 c.ContextFlags = contextFlags; \
194#define GET_CURRENT_CONTEXT(c, contextFlags) \
196 memset(&c, 0, sizeof(CONTEXT)); \
197 c.ContextFlags = contextFlags; \
200 __asm mov c.Eip, eax \
201 __asm mov c.Ebp, ebp \
202 __asm mov c.Esp, esp \
209#define GET_CURRENT_CONTEXT(c, contextFlags) \
211 memset(&c, 0, sizeof(CONTEXT)); \
212 c.ContextFlags = contextFlags; \
213 RtlCaptureContext(&c); \
StackWalker(int options=RetrieveNone, LPCSTR szSymPath=NULL, DWORD dwProcessId=GetCurrentProcessId(), HANDLE hProcess=GetCurrentProcess())
StackWalkerInternal * m_sw
BOOL ShowCallstack(HANDLE hThread=GetCurrentThread(), const CONTEXT *context=NULL, PReadProcessMemoryRoutine readMemoryFunction=NULL, LPVOID pUserData=NULL)
virtual void OnCallstackEntry(CallstackEntryType eType, CallstackEntry &entry)
struct StackWalker::CallstackEntry CallstackEntry
static BOOL __stdcall myReadProcMem(HANDLE hProcess, DWORD64 qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead)
virtual void OnOutput(LPCSTR szText)
friend StackWalkerInternal
BOOL(__stdcall * PReadProcessMemoryRoutine)(HANDLE hProcess, DWORD64 qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead, LPVOID pUserData)
virtual void OnDbgHelpErr(LPCSTR szFuncName, DWORD gle, DWORD64 addr)
virtual void OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName)
StackWalker(DWORD dwProcessId, HANDLE hProcess)
virtual void OnLoadModule(LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size, DWORD result, LPCSTR symType, LPCSTR pdbName, ULONGLONG fileVersion)
unsigned __int64 * PDWORD64
CHAR undName[STACKWALK_MAX_NAMELEN]
CHAR loadedImageName[STACKWALK_MAX_NAMELEN]
CHAR lineFileName[STACKWALK_MAX_NAMELEN]
CHAR name[STACKWALK_MAX_NAMELEN]
CHAR moduleName[STACKWALK_MAX_NAMELEN]
CHAR undFullName[STACKWALK_MAX_NAMELEN]