5 #ifndef _INC_cStackTrace_H
6 #define _INC_cStackTrace_H
11 #include "../GrayLibBase.h"
13 #if defined(_MSC_VER) && ! USE_UNICODE && ! defined(UNDER_CE)
21 class cStackTraceInternal;
27 friend class cStackTraceInternal;
29 enum StackTraceOptions
34 RetrieveModuleInfo = 4,
35 RetrieveFileVersion = 8,
36 RetrieveVerbose = 0xF,
44 UINT options = OptionsAll,
45 const char* pszSymPath =
nullptr,
47 HANDLE hProcess = ::GetCurrentProcess()
49 cStackTrace(PROCESSID_t dwProcessId, HANDLE hProcess);
50 virtual ~cStackTrace();
52 typedef BOOL (__stdcall *PReadProcessMemoryRoutine)(
54 UINT_PTR qwBaseAddress,
57 LPDWORD lpNumberOfBytesRead,
64 HANDLE hThread = ::GetCurrentThread(),
65 const CONTEXT *context =
nullptr,
66 PReadProcessMemoryRoutine readMemoryFunction =
nullptr,
67 LPVOID pUserData =
nullptr
72 enum { StackTrace_MAX_NAMELEN = 1024 };
80 char name[StackTrace_MAX_NAMELEN];
81 char undName[StackTrace_MAX_NAMELEN];
82 char undFullName[StackTrace_MAX_NAMELEN];
83 UINT_PTR offsetFromSmybol;
86 char lineFileName[StackTrace_MAX_NAMELEN];
88 const char* symTypeString;
89 char moduleName[StackTrace_MAX_NAMELEN];
91 char loadedImageName[StackTrace_MAX_NAMELEN];
94 enum CallstackEntryType {firstEntry, nextEntry, lastEntry};
96 virtual void OnSymInit(
const char* szSearchPath, DWORD symOptions,
const char* szUserName);
97 virtual void OnLoadModule(
const FILECHAR_t* img,
const char* mod, UINT_PTR baseAddr, DWORD size,
const char* symType,
const char* pdbName, ULONGLONG fileVersion);
98 virtual void OnCallstackEntry(CallstackEntryType eType, StackFrameA &entry);
99 virtual void OnDbgHelpErr(
const char* szFuncName,
HRESULT gle, UINT_PTR addr);
100 virtual void OnOutput(
const char* szText);
102 cStackTraceInternal* m_sw;
104 PROCESSID_t m_dwProcessId;
112 static BOOL __stdcall myReadProcMem(HANDLE hProcess, UINT_PTR qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead);
114 static BOOL __stdcall myReadProcMem(HANDLE hProcess, DWORD qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead);
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
static PROCESSID_t __stdcall get_CurrentProcessId()
Definition: cAppState.h:175
UNITTEST2_PREDEF(cQuadtree)
cStringT< FILECHAR_t > cStringF
A file name. checks USE_UNICODE_FN. related to cFilePath.
Definition: cFilePath.h:17
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22