本文整理汇总了C++中DbgHelp::initialized方法的典型用法代码示例。如果您正苦于以下问题:C++ DbgHelp::initialized方法的具体用法?C++ DbgHelp::initialized怎么用?C++ DbgHelp::initialized使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DbgHelp
的用法示例。
在下文中一共展示了DbgHelp::initialized方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: format_address_fallback
std::string format_address_win32(const void* addr) const
{
if (!dbghelp.initialized())
return format_address_fallback(addr);
DWORD64 symbol_info_buf[sizeof(SYMBOL_INFO) + MAX_SYM_NAME];
const auto symbol_info = reinterpret_cast<SYMBOL_INFO*>(symbol_info_buf);
symbol_info->SizeOfStruct = sizeof(SYMBOL_INFO);
symbol_info->MaxNameLen = MAX_SYM_NAME;
IMAGEHLP_MODULE64 module_info;
module_info.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);
DWORD64 symbol_offset;
const auto symbol_resolved = SymFromAddr(
GetCurrentProcess(),
reinterpret_cast<DWORD64>(addr),
&symbol_offset,
symbol_info);
if (symbol_resolved)
{
const auto module_resolved = SymGetModuleInfo64(
GetCurrentProcess(),
symbol_info->ModBase,
&module_info);
if (module_resolved)
{
return format_symbol(
module_info.ModuleName,
symbol_info->Name,
reinterpret_cast<const void*>(symbol_offset));
}
else
{
return format_symbol(symbol_info->Name, addr);
}
}
else
{
const auto module_resolved = SymGetModuleInfo64(
GetCurrentProcess(),
reinterpret_cast<DWORD64>(addr),
&module_info);
if (module_resolved)
{
const auto module_offset = reinterpret_cast<const char*>(addr) - module_info.BaseOfImage;
return format_module(module_info.ModuleName, module_offset);
}
else
{
return format_address_fallback(addr);
}
}
}