void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char* fmt, ...) { if (!g_Config.bEnableLogging) return; va_list args; va_start(args, fmt); LogManager *instance = LogManager::GetInstance(); if (instance) { instance->Log(level, type, file, line, fmt, args); } va_end(args); }
void CodeBlocksApp::AttachDebugger() { const wxString localAttach = m_DebuggerAttach; const wxString localConfig = m_DebuggerConfig; // Reset the values to prevent old values to be used when the user forgets to pass all required // command line parameters. m_DebuggerAttach = m_DebuggerConfig = wxString(); LogManager *logManager = Manager::Get()->GetLogManager(); if (localAttach.empty() || localConfig.empty()) { if (localAttach.empty() != localConfig.empty()) { logManager->LogError( _("For attaching to work you need to provide both '--dbg-attach' and '--dbg-config'")); logManager->Log(wxT(" --dbg-attach='") + localAttach + wxT("'")); logManager->Log(wxT(" --dbg-config='") + localConfig + wxT("'")); } return; } logManager->Log(wxString::Format(_("Attach debugger '%s' to '%s'"), localConfig.wx_str(), localAttach.wx_str())); // Split the dbg-config to plugin name and config name wxString::size_type pos = localConfig.find(wxT(':')); if (pos == wxString::npos || pos == 0) { logManager->LogError( _("No delimiter found. The --dbg-config format is 'plugin-name:config-name'")); return; } const wxString pluginName = localConfig.substr(0, pos); const wxString configName = localConfig.substr(pos + 1); // Find the plugin and the config. DebuggerManager *debuggerManager = Manager::Get()->GetDebuggerManager(); const DebuggerManager::RegisteredPlugins &debuggers = debuggerManager->GetAllDebuggers(); if (debuggers.empty()) { logManager->LogError(_("No debugger plugins loaded!")); return; } cbDebuggerPlugin *plugin = nullptr; int configIndex = -1; const DebuggerManager::PluginData *pluginData = nullptr; for (const auto &info : debuggers) { if (info.first->GetSettingsName() == pluginName) { plugin = info.first; pluginData = &info.second; break; } } if (!plugin) { logManager->LogError(wxString::Format(_("Debugger plugin '%s' not found!"), pluginName.wx_str())); logManager->Log(_("Available plugins:")); for (const auto &info : debuggers) { cbDebuggerPlugin *p = info.first; logManager->Log(wxString::Format(_(" '%s' (%s)"), p->GetSettingsName().wx_str(), p->GetGUIName().wx_str())); } return; } const DebuggerManager::ConfigurationVector &configs = pluginData->GetConfigurations(); for (auto it = configs.begin(); it != configs.end(); ++it) { if ((*it)->GetName() == configName) { configIndex = std::distance(configs.begin(), it); break; } } if (configIndex == -1) { logManager->LogError(wxString::Format(_("Debugger configuration '%s' not found!"), configName.wx_str())); logManager->Log(_("Available configurations:")); for (const cbDebuggerConfiguration *config : configs) logManager->Log(wxString::Format(_(" '%s'"), config->GetName().wx_str())); return; } // We have a debugger plugin and config, so lets try to attach... logManager->Log(_("Debugger plugin and configuration found. Attaching!!!")); plugin->SetActiveConfig(configIndex); plugin->AttachToProcess(localAttach); }