Exemple #1
0
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(); }
}
Exemple #2
0
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();
}
Exemple #3
0
void LLDBPlugin::DoCleanup()
{
    ClearDebuggerMarker();
    TerminateTerminal();
    m_connector.StopDebugServer();
    m_stopReasonPrompted = false;
    m_raisOnBpHit = false;
}
Exemple #4
0
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();
}
Exemple #6
0
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 );
}
Exemple #7
0
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);
        }
    }
}
Exemple #9
0
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();
}
Exemple #10
0
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();
    }
}