void NodeJSDebugger::SetCanInteract(bool canInteract) { clDebugEvent event(canInteract ? wxEVT_NODEJS_DEBUGGER_CAN_INTERACT : wxEVT_NODEJS_DEBUGGER_LOST_INTERACT); EventNotifier::Get()->ProcessEvent(event); this->m_canInteract = canInteract; if(!canInteract) { ClearDebuggerMarker(); } }
void LLDBPlugin::DestroyUI() { // Destroy the callstack window if(m_callstack) { wxAuiPaneInfo& pi = m_mgr->GetDockingManager()->GetPane(LLDB_CALLSTACK_PANE_NAME); if(pi.IsOk()) { m_mgr->GetDockingManager()->DetachPane(m_callstack); } m_callstack->Destroy(); m_callstack = NULL; } if(m_breakpointsView) { wxAuiPaneInfo& pi = m_mgr->GetDockingManager()->GetPane(LLDB_BREAKPOINTS_PANE_NAME); if(pi.IsOk()) { m_mgr->GetDockingManager()->DetachPane(m_breakpointsView); } m_breakpointsView->Destroy(); m_breakpointsView = NULL; } if(m_localsView) { wxAuiPaneInfo& pi = m_mgr->GetDockingManager()->GetPane(LLDB_LOCALS_PANE_NAME); if(pi.IsOk()) { m_mgr->GetDockingManager()->DetachPane(m_localsView); } m_localsView->Destroy(); m_localsView = NULL; } if(m_threadsView) { wxAuiPaneInfo& pi = m_mgr->GetDockingManager()->GetPane(LLDB_THREADS_PANE_NAME); if(pi.IsOk()) { m_mgr->GetDockingManager()->DetachPane(m_threadsView); } m_threadsView->Destroy(); m_threadsView = NULL; } if(m_tooltip) { m_tooltip->Destroy(); m_tooltip = NULL; } ClearDebuggerMarker(); m_mgr->GetDockingManager()->Update(); }
void LLDBPlugin::DoCleanup() { ClearDebuggerMarker(); TerminateTerminal(); m_connector.StopDebugServer(); m_stopReasonPrompted = false; m_raisOnBpHit = false; }
void LLDBPlugin::OnLLDBRunning(LLDBEvent& event) { event.Skip(); m_connector.SetCanInteract(false); // When the IDE loses the focus - clear the debugger marker ClearDebuggerMarker(); }
void NodeJSDebugger::ConnectionLost(const wxString& errmsg) { wxUnusedVar(errmsg); m_node.Terminate(); m_socket.Reset(NULL); clDebugEvent event(wxEVT_NODEJS_DEBUGGER_STOPPED); event.SetDebuggerName("Node.js"); EventNotifier::Get()->AddPendingEvent(event); // Clear the debugger markers ClearDebuggerMarker(); }
void XDebugManager::DoStopDebugger() { ClearDebuggerMarker(); m_connected = false; // Clear all handlers from the queue m_handlers.clear(); // Save the breakpoints // Reset the connection CL_DEBUG("CodeLite >>> closing debug session"); wxDELETE(m_readerThread); // Notify about debug session ended XDebugEvent eventEnd(wxEVT_XDEBUG_SESSION_ENDED); EventNotifier::Get()->AddPendingEvent( eventEnd ); }
void NodeJSDebugger::OnNodeTerminated(clCommandEvent& event) { wxUnusedVar(event); EventNotifier::Get()->TopFrame()->Raise(); // Restart the network thread wxBusyCursor bc; #ifndef __WXGTK__ m_socket.Reset(NULL); #else m_node.Terminate(); m_socket.Reset(NULL); clDebugEvent eventStop(wxEVT_NODEJS_DEBUGGER_STOPPED); eventStop.SetDebuggerName("Node.js"); EventNotifier::Get()->AddPendingEvent(eventStop); // Clear the debugger markers ClearDebuggerMarker(); #endif }
void NodeJSDebugger::OnHighlightLine(clDebugEvent& event) { event.Skip(); int line = event.GetLineNumber(); wxFileName file = event.GetFileName(); ClearDebuggerMarker(); if(file.Exists()) { CallAfter(&NodeJSDebugger::DoHighlightLine, file.GetFullPath(), line); } else { // Probably a node.js internal file wxFileName fn(clStandardPaths::Get().GetUserDataDir(), file.GetFullPath()); fn.AppendDir("webtools"); fn.AppendDir("tmp"); if(fn.Exists()) { CallAfter(&NodeJSDebugger::DoHighlightLine, fn.GetFullPath(), line); } else { // Ask the file from nodejs GetCurrentFrameSource(file.GetFullPath(), line); } } }
void NodeJSDebugger::ConnectionLost(const wxString& errmsg) { CL_DEBUG(errmsg); #ifdef __WXGTK__ #if 0 if(errmsg != "Debug session stopped") { ::wxMessageBox(_("Node.js debugger disconnected unexpectedly\nYou might want to check the console to see if " "there are any useful messages"), _("CodeLite"), wxICON_WARNING | wxOK_DEFAULT | wxCENTER); } #endif #else m_node.Terminate(); m_socket.Reset(NULL); clDebugEvent event(wxEVT_NODEJS_DEBUGGER_STOPPED); event.SetDebuggerName("Node.js"); EventNotifier::Get()->AddPendingEvent(event); #endif // Clear the debugger markers ClearDebuggerMarker(); }
void LLDBPlugin::OnLLDBStopped(LLDBEvent& event) { event.Skip(); CL_DEBUGS(wxString() << "CODELITE>> LLDB stopped at " << event.GetFileName() << ":" << event.GetLinenumber()); m_connector.SetCanInteract(true); if(event.GetInterruptReason() == kInterruptReasonNone) { if(m_raisOnBpHit) { EventNotifier::Get()->TopFrame()->Raise(); } // Mark the debugger line / file IEditor* editor = m_mgr->FindEditor(event.GetFileName()); if(!editor && wxFileName::Exists(event.GetFileName())) { // Try to open the editor editor = m_mgr->OpenFile(event.GetFileName(), "", event.GetLinenumber() - 1); } if(editor) { // select it first if(editor != m_mgr->GetActiveEditor()) { m_mgr->SelectPage(editor->GetCtrl()); } else { // just make sure that the page has the focus editor->SetActive(); } // clear the markers ClearDebuggerMarker(); SetDebuggerMarker(editor->GetCtrl(), event.GetLinenumber() - 1); } else { ClearDebuggerMarker(); } // request for local variables m_connector.RequestLocals(); wxString message; if(!m_stopReasonPrompted && event.ShouldPromptStopReason(message)) { m_stopReasonPrompted = true; // show this message only once per debug session wxString msg; msg << "Program stopped\nStop reason: " << message; ::wxMessageBox(msg, "CodeLite", wxICON_ERROR | wxOK | wxCENTER); } } else if(event.GetInterruptReason() == kInterruptReasonApplyBreakpoints) { CL_DEBUG("Applying breakpoints and continue..."); m_connector.ApplyBreakpoints(); m_connector.Continue(); } else if(event.GetInterruptReason() == kInterruptReasonDeleteAllBreakpoints) { CL_DEBUG("Deleting all breakpoints"); m_connector.DeleteAllBreakpoints(); m_connector.Continue(); } else if(event.GetInterruptReason() == kInterruptReasonDeleteBreakpoint) { CL_DEBUG("Deleting all pending deletion breakpoints"); m_connector.DeleteBreakpoints(); m_connector.Continue(); } else if(event.GetInterruptReason() == kInterruptReasonDetaching) { CL_DEBUG("Detaching from process"); m_connector.Detach(); } }