CCallStack.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include <Windows.h>
  3. #include <DbgHelp.h>
  4. #include <iostream>
  5. #include <vector>
  6. #ifdef C_CALL_STACK_EXPORTS
  7. #define C_CALL_STACK_DLL_API __declspec(dllexport)
  8. #else
  9. #define C_CALL_STACK_DLL_API //__declspec(dllimport)
  10. #endif
  11. // Ìí¼Ó¶Ôdbghelp.libµÄ±àÒëÒÀÀµ
  12. #pragma comment(lib, "dbghelp.lib")
  13. using namespace std;
  14. namespace ns_ccs {
  15. #define MAX_ADDRESS_LENGTH 32
  16. #define MAX_NAME_LENGTH 1024
  17. typedef VOID(_stdcall* CallBackCallStack) (VOID);
  18. typedef struct _CrashInfo
  19. {
  20. CHAR ErrorCode[MAX_ADDRESS_LENGTH];
  21. CHAR Address[MAX_ADDRESS_LENGTH];
  22. CHAR Flags[MAX_ADDRESS_LENGTH];
  23. }CrashInfo;
  24. typedef struct _CallStackInfo
  25. {
  26. CHAR ModuleName[MAX_NAME_LENGTH];
  27. CHAR MethodName[MAX_NAME_LENGTH];
  28. CHAR FileName[MAX_NAME_LENGTH];
  29. CHAR LineNumber[MAX_NAME_LENGTH];
  30. }CallStackInfo;
  31. class C_CALL_STACK_DLL_API CCallStack
  32. {
  33. public:
  34. void SafeStrCpy(char* szDest, size_t nMaxDestSize, const char* szSrc);
  35. CrashInfo GetCrashInfo(const EXCEPTION_RECORD *pRecord);
  36. vector<CallStackInfo> GetCallStack(const CONTEXT *pContext);
  37. CCallStack();
  38. };
  39. }
  40. EXTERN_C C_CALL_STACK_DLL_API LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException);