DbgHelpSymbolManager.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #ifdef DBGHELP_SYMBOL_MANAGER
  6. #define DBGHELP_TRANSLATE_TCHAR
  7. // dbghelp.h is not clean with warning 4091
  8. #pragma warning(push)
  9. #pragma warning(disable: 4091) /* warning C4091: 'typedef ': ignored on left of '' when no variable is declared */
  10. #include <dbghelp.h>
  11. #pragma warning(pop)
  12. class DbgHelpSymbolManager
  13. {
  14. public:
  15. static void EnsureInitialized() { Instance.Initialize(); }
  16. static BOOL SymFromAddr(PVOID address, DWORD64 * dwDisplacement, PSYMBOL_INFO pSymbol);
  17. static BOOL SymGetLineFromAddr64(_In_ PVOID address, _Out_ PDWORD pdwDisplacement, _Out_ PIMAGEHLP_LINEW64 pLine);
  18. static size_t PrintSymbol(PVOID address);
  19. private:
  20. DbgHelpSymbolManager() : isInitialized(false), hDbgHelpModule(nullptr), pfnSymFromAddrW(nullptr) {}
  21. ~DbgHelpSymbolManager();
  22. static DbgHelpSymbolManager Instance;
  23. void Initialize();
  24. bool isInitialized;
  25. CriticalSection cs;
  26. HANDLE hProcess;
  27. HMODULE hDbgHelpModule;
  28. typedef BOOL(__stdcall *PfnSymFromAddrW)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW);
  29. PfnSymFromAddrW pfnSymFromAddrW;
  30. typedef BOOL(__stdcall *PfnSymGetLineFromAddr64W)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);
  31. PfnSymGetLineFromAddr64W pfnSymGetLineFromAddr64W;
  32. };
  33. #endif