void LLDBPlugin::OnDebugQuickDebug(clDebugEvent& event) { #ifdef __WXMSW__ ::wxMessageBox( _("Quick Debug with LLDB is not supported under Windows"), "CodeLite", wxOK | wxCENTER | wxICON_WARNING); return; #endif if(!DoInitializeDebugger(event, true)) { return; } LLDBConnectReturnObject retObj; LLDBSettings settings; settings.Load(); if(m_connector.Connect(retObj, settings, 5)) { // Apply the environment EnvSetter env; // Get list of breakpoints and add them ( we will apply them later on ) BreakpointInfo::Vec_t gdbBps; m_mgr->GetAllBreakpoints(gdbBps); // remove all breakpoints from previous session m_connector.DeleteAllBreakpoints(); // apply the serialized breakpoints // In 'Quick Debug' we stop on main m_connector.AddBreakpoint("main"); m_connector.AddBreakpoints(gdbBps); LLDBCommand startCommand; startCommand.FillEnvFromMemory(); startCommand.SetExecutable(event.GetExecutableName()); startCommand.SetCommandArguments(event.GetArguments()); startCommand.SetWorkingDirectory(event.GetWorkingDirectory()); startCommand.SetStartupCommands(event.GetStartupCommands()); startCommand.SetRedirectTTY(m_terminalTTY); m_connector.Start(startCommand); } else { // Failed to connect, notify and perform cleanup DoCleanup(); wxString message; message << _("Could not connect to codelite-lldb at '") << m_connector.GetConnectString() << "'"; ::wxMessageBox(message, "CodeLite", wxICON_ERROR | wxOK | wxCENTER); return; } }
void LLDBPlugin::OnDebugCoreFile(clDebugEvent& event) { if(event.GetDebuggerName() != LLDB_DEBUGGER_NAME) { event.Skip(); return; } #ifdef __WXMSW__ ::wxMessageBox( _("Debug core file with LLDB is not supported under Windows"), "CodeLite", wxOK | wxCENTER | wxICON_WARNING); return; #endif if(!DoInitializeDebugger(event, false)) { return; } LLDBConnectReturnObject retObj; LLDBSettings settings; settings.Load(); if(m_connector.Connect(retObj, settings, 5)) { // Apply the environment EnvSetter env; // remove all breakpoints from previous session m_connector.DeleteAllBreakpoints(); LLDBCommand startCommand; startCommand.FillEnvFromMemory(); startCommand.SetCommandType(kCommandDebugCoreFile); startCommand.SetExecutable(event.GetExecutableName()); startCommand.SetCorefile(event.GetCoreFile()); startCommand.SetWorkingDirectory(event.GetWorkingDirectory()); startCommand.SetRedirectTTY(m_terminalTTY); m_connector.OpenCoreFile(startCommand); } else { // Failed to connect, notify and perform cleanup DoCleanup(); wxString message; message << _("Could not connect to codelite-lldb at '") << m_connector.GetConnectString() << "'"; ::wxMessageBox(message, "CodeLite", wxICON_ERROR | wxOK | wxCENTER); return; } }
bool LLDBPlugin::DoInitializeDebugger(clDebugEvent& event, bool redirectOutput, const wxString& terminalTitle) { if(event.GetDebuggerName() != LLDB_DEBUGGER_NAME) { event.Skip(); return false; } if(m_connector.IsRunning()) { // Another debug session is already in progress ::wxMessageBox(_("Another debug session is already in progress. Please stop it first"), "CodeLite", wxOK | wxCENTER | wxICON_WARNING); return false; } TerminateTerminal(); // If terminal is required, launch it now bool isWindows = wxPlatformInfo::Get().GetOperatingSystemId() & wxOS_WINDOWS; if(redirectOutput && !isWindows) { wxString realPts; ::LaunchTerminalForDebugger( terminalTitle.IsEmpty() ? event.GetExecutableName() : terminalTitle, m_terminalTTY, realPts, m_terminalPID); if(m_terminalPID != wxNOT_FOUND) { CL_DEBUG("Successfully launched terminal"); } else { // Failed to launch it... DoCleanup(); ::wxMessageBox(_("Failed to start terminal for debugger"), "CodeLite", wxICON_ERROR | wxOK | wxCENTER); return false; } } // Launch local server if needed LLDBSettings settings; settings.Load(); if(!settings.IsUsingRemoteProxy() && !m_connector.LaunchLocalDebugServer()) { DoCleanup(); return false; } return true; }