| 1026 | |
| 1027 | |
| 1028 | std::vector<DebugModule> DbgEngAdapter::GetModuleList() |
| 1029 | { |
| 1030 | if (!this->m_debugSymbols) |
| 1031 | return {}; |
| 1032 | |
| 1033 | unsigned long loaded_module_count {}, unloaded_module_count {}; |
| 1034 | |
| 1035 | if (this->m_debugSymbols->GetNumberModules(&loaded_module_count, &unloaded_module_count) != S_OK) |
| 1036 | return {}; |
| 1037 | |
| 1038 | if (!loaded_module_count) |
| 1039 | return {}; |
| 1040 | |
| 1041 | std::vector<DebugModule> modules {}; |
| 1042 | |
| 1043 | const auto total_modules = loaded_module_count + unloaded_module_count; |
| 1044 | auto module_parameters = std::make_unique<DEBUG_MODULE_PARAMETERS[]>(total_modules); |
| 1045 | if (this->m_debugSymbols->GetModuleParameters(total_modules, nullptr, 0, module_parameters.get()) != S_OK) |
| 1046 | return {}; |
| 1047 | |
| 1048 | for (std::size_t module_index {}; module_index < total_modules; module_index++) |
| 1049 | { |
| 1050 | const auto& parameters = module_parameters[module_index]; |
| 1051 | |
| 1052 | char name[1024]; |
| 1053 | char short_name[1024]; |
| 1054 | char loaded_image_name[1024]; |
| 1055 | if (this->m_debugSymbols->GetModuleNames( |
| 1056 | module_index, 0, name, 1024, nullptr, short_name, 1024, nullptr, loaded_image_name, 1024, nullptr) |
| 1057 | != S_OK) |
| 1058 | continue; |
| 1059 | |
| 1060 | if (m_usePDBFileName &&(!m_pdbFileName.empty()) && |
| 1061 | DebugModule::IsSameBaseModule(short_name, m_pdbFileName)) |
| 1062 | { |
| 1063 | strcpy_s(name, 1024, m_originalFileName.c_str()); |
| 1064 | } |
| 1065 | |
| 1066 | modules.emplace_back( |
| 1067 | name, short_name, parameters.Base, parameters.Size, !(parameters.Flags & DEBUG_MODULE_UNLOADED)); |
| 1068 | } |
| 1069 | |
| 1070 | return modules; |
| 1071 | } |
| 1072 | |
| 1073 | bool DbgEngAdapter::BreakInto() |
| 1074 | { |
nothing calls this directly
no outgoing calls
no test coverage detected