// Copyright (c) 2017 Egor Tensin // This file is part of the "PDB repository" project. // For details, see https://github.com/egor-tensin/pdb-repo. // Distributed under the MIT License. #pragma once #include "address.hpp" #include "module.hpp" #include "symbol.hpp" #include #include #include namespace pdb { class DbgHelp { public: DbgHelp(); ~DbgHelp(); void close(); ModuleInfo load_pdb(const std::string& path) const; typedef std::function OnModule; void enum_modules(const OnModule&) const; typedef std::function OnSymbol; static constexpr auto all_symbols = "*!*"; void enum_symbols(const ModuleInfo&, const std::string& mask, const OnSymbol&) const; void enum_symbols(const ModuleInfo&, const OnSymbol&) const; void enum_symbols(const std::string& mask, const OnSymbol&) const; void enum_symbols(const OnSymbol&) const; SymbolInfo resolve_symbol(Address) const; SymbolInfo resolve_symbol(const std::string&) const; LineInfo resolve_line(Address) const; private: const HANDLE id = GetCurrentProcess(); bool closed = false; DbgHelp(const DbgHelp&) = delete; DbgHelp& operator=(const DbgHelp&) = delete; }; } // namespace pdb