PStack  2.0
Stack trace printer for MSVC and GCC binaries
psystem::debug_help_dll Class Referencefinal

Wraps invocations into the Windows DbgHelp DLL onto a lazily-loaded version. More...

#include <debug_help_dll.hpp>

Inheritance diagram for psystem::debug_help_dll:
Collaboration diagram for psystem::debug_help_dll:

Construction / Destruction

 debug_help_dll () noexcept
 Construct (without loading) an instance to wrap DbgHelp.dll.
 

Public Interface

void load_all_functions ()
 Populates all loaded_function instances in from the library immediately. More...
 

DbgHelp Imports

loaded_function< decltype(::StackWalk64)> StackWalk64
 See MSDN for details on StackWalk64.
 
loaded_function< decltype(::SymCleanup)> SymCleanup
 See MSDN for details on SymCleanup.
 
loaded_function< decltype(::SymFromAddr)> SymFromAddr
 See MSDN for details on SymFromAddr.
 
loaded_function< decltype(::SymFunctionTableAccess64)> SymFunctionTableAccess64
 See MSDN for details on SymFunctionTableAccess64.
 
loaded_function< decltype(::SymGetModuleBase64)> SymGetModuleBase64
 See MSDN for details on SymGetModuleBase64.
 
loaded_function< decltype(::SymGetOptions)> SymGetOptions
 See MSDN for details on SymGetOptions.
 
loaded_function< decltype(::SymInitialize)> SymInitialize
 See MSDN for details on SymInitialize.
 
loaded_function< decltype(::SymSetOptions)> SymSetOptions
 See MSDN for details on SymSetOptions.
 

Additional Inherited Members

- Public Types inherited from psystem::shared_library
using library_version = uint32_t
 Type for shared library versions. More...
 
- Public Member Functions inherited from psystem::shared_library
 ~shared_library () noexcept
 Clean up the shared library. More...
 
library_version get_version () const
 Access the version for the library that this instance wraps. More...
 
bool is_loaded () const noexcept
 Determines if the shared library is mapped into the process space. More...
 
void load ()
 Loads the requested library into the current process space. More...
 
void unload () noexcept
 Unload this library and clear the function pointers. More...
 
- Protected Member Functions inherited from psystem::shared_library
 shared_library (std::string library_name, size_t num_functions) noexcept
 Construct a shared library instance (without loading the module). More...
 
FARPROC get_function (char const *export_name) const
 Acquire a function pointer (by name) from a loaded library. More...
 
template<size_t N>
void load_all_functions (char const *export_names[N])
 Fully populate the m_functions data with addresses. More...
 
- Protected Member Functions inherited from psystem::not_copyable
 not_copyable (not_copyable const &)=delete
 Delete the copy constructor.
 
not_copyableoperator= (not_copyable const &)=delete
 Delete the assignment operator.
 
constexpr not_copyable () noexcept
 A simple CTOR suitable for noexcept and constexpr uses.
 
 ~not_copyable () noexcept
 A simple CTOR suitable for noexcept uses.
 
- Protected Attributes inherited from psystem::shared_library
std::vector< FARPROC > m_functions
 The cache of function pointers gathered from a loaded library.
 
psystem::shared_handle< HMODULE, nullptr > m_library_handle
 The system handle to the loaded library. It may be nullptr.
 
std::string m_library_name
 The (passed-in) name of the library that this class represents.
 

Detailed Description

Wraps invocations into the Windows DbgHelp DLL onto a lazily-loaded version.

This decoupling of the "automatic" DLL invocation allows us to check the version of DbgHelp.dll before continuing. Slight API differences have caused difficulty in the past.

Author
Matt Bisson
Date
14 July, 2008 – 20 November, 2015
Since
ProcLib 1.3
Version
PSystem 2.0
Todo:
unload() will leave bad function pointers here.

Member Function Documentation

void psystem::debug_help_dll::load_all_functions ( )

Populates all loaded_function instances in from the library immediately.

Exceptions
psystem::exception::system_exceptionif any of the following occur:
  • the library could not be loaded.
  • the specified symbol could not be found in the loaded shared library.

The documentation for this class was generated from the following files: