Ejemplo n.º 1
0
void DebuggerDisassemblyTab::OnCurLine(clCommandEvent& e)
{
    e.Skip();
    size_t curline = wxString::npos;
    DebuggerEventData* ded = dynamic_cast<DebuggerEventData*>(e.GetClientObject());
    if(ded && ded->m_disassembleLines.size()) {
        DisassembleEntry entry = ded->m_disassembleLines.at(0);
        for(size_t i = 0; i < m_lines.size(); ++i) {
            if(m_lines.at(i).m_address == entry.m_address) {
                curline = i;
                break;
            }
        }

        if(curline != wxString::npos) {
            m_stc->MarkerAdd(curline, CURLINE_MARKER);

            int pos = m_stc->PositionFromLine(curline);
            m_stc->SetCurrentPos(pos);
            m_stc->SetSelection(pos, pos);
            DoCentrLine(curline);
            // m_stc->EnsureCaretVisible();
            m_textCtrlCurFunction->ChangeValue(entry.m_function);
        }
    }
}
Ejemplo n.º 2
0
void DebuggerDisassemblyTab::OnOutput(clCommandEvent& e)
{
    e.Skip();
    DoClearDisassembleView();
    m_stc->SetReadOnly(false);

    BreakpointInfoVec_t memBps;
    wxStringSet_t addressSet;
    ManagerST::Get()->GetBreakpointsMgr()->GetAllMemoryBreakpoints(memBps);
    for(size_t i = 0; i < memBps.size(); ++i) {
        addressSet.insert(memBps.at(i).memory_address);
    }
    // Parse the output
    DebuggerEventData* ded = dynamic_cast<DebuggerEventData*>(e.GetClientObject());
    if(ded) {

        m_lines.insert(m_lines.end(), ded->m_disassembleLines.begin(), ded->m_disassembleLines.end());

        for(size_t i = 0; i < ded->m_disassembleLines.size(); ++i) {
            m_stc->AppendText(ded->m_disassembleLines.at(i).m_address + "  " + ded->m_disassembleLines.at(i).m_inst +
                              "\n");
            // restore breakpoints
            if(addressSet.count(ded->m_disassembleLines.at(i).m_address)) {
                m_stc->MarkerAdd(i, BREAKPOINT_MARKER);
            }
        }
    }
    clMainFrame::Get()->GetDebuggerPane()->GetBreakpointView()->Initialize();
    m_stc->SetReadOnly(true);
}
Ejemplo n.º 3
0
void DebuggerDisassemblyTab::OnShowRegisters(clCommandEvent& e)
{
    e.Skip();
    DoClearRegistersView();
    DebuggerEventData* ded = dynamic_cast<DebuggerEventData*>(e.GetClientObject());
    wxStringMap_t curvalues;
    if(ded) {
        // Split the list into 2
        size_t i = 0;
        while(i < ded->m_registers.size()) {
            RegistersViewModelClientData* cd = new RegistersViewModelClientData(false, false);

            wxVector<wxVariant> cols;
            cols.push_back(ded->m_registers.at(i).reg_name);
            cols.push_back(ded->m_registers.at(i).reg_value);
            if(!m_oldValues.empty()) {
                wxStringMap_t::iterator iter = m_oldValues.find(ded->m_registers.at(i).reg_name);
                if(iter != m_oldValues.end() && iter->second != ded->m_registers.at(i).reg_value) {
                    cd->SetFirstColModified(true);
                }
            }
            curvalues.insert(std::make_pair(ded->m_registers.at(i).reg_name, ded->m_registers.at(i).reg_value));
            ++i;

            if(i < ded->m_registers.size()) {
                cols.push_back(ded->m_registers.at(i).reg_name);
                cols.push_back(ded->m_registers.at(i).reg_value);
                curvalues.insert(std::make_pair(ded->m_registers.at(i).reg_name, ded->m_registers.at(i).reg_value));

                if(!m_oldValues.empty()) {
                    wxStringMap_t::iterator iter = m_oldValues.find(ded->m_registers.at(i).reg_name);
                    if(iter != m_oldValues.end() && iter->second != ded->m_registers.at(i).reg_value) {
                        cd->SetSecondColModified(true);
                    }
                }
                ++i;

            } else {
                // no more registeres to display
                cols.push_back("");
                cols.push_back("");
            }

            m_dvListCtrlRegisters->AppendItem(cols, (wxUIntPtr)cd);
        }
    }
    m_oldValues.swap(curvalues);
}
Ejemplo n.º 4
0
void NewBuildTab::OnBuildStarted(clCommandEvent& e)
{
    e.Skip();
    if ( IS_WINDOWS ) {
        m_cygwinRoot.Clear();
        EnvSetter es;
        wxString cmd;
        cmd << "cygpath -w /";
        wxArrayString arrOut;
        ProcUtils::SafeExecuteCommand(cmd, arrOut);
        
        if ( arrOut.IsEmpty() == false ) {
            m_cygwinRoot = arrOut.Item(0);
        }
    }

    m_buildInProgress = true;
    
    // Reload the build settings data
    EditorConfigST::Get()->ReadObject ( wxT ( "build_tab_settings" ), &m_buildTabSettings );
    m_textRenderer->SetErrFgColor(  m_buildTabSettings.GetErrorColour() );
    m_textRenderer->SetWarnFgColor( m_buildTabSettings.GetWarnColour() );

    m_autoHide         = m_buildTabSettings.GetAutoHide();
    m_showMe           = (BuildTabSettingsData::ShowBuildPane)m_buildTabSettings.GetShowBuildPane();
    m_skipWarnings     = m_buildTabSettings.GetSkipWarnings();

    if ( e.GetEventType() != wxEVT_SHELL_COMMAND_STARTED_NOCLEAN) {
        DoClear();
        DoCacheRegexes();
    }

    // Show the tab if needed
    OutputPane *opane = clMainFrame::Get()->GetOutputPane();

    wxWindow *win(NULL);
    size_t sel =  opane->GetNotebook()->GetSelection();
    if(sel != Notebook::npos)
        win = opane->GetNotebook()->GetPage(sel);

    if(m_showMe == BuildTabSettingsData::ShowOnStart) {
        ManagerST::Get()->ShowOutputPane(OutputPane::BUILD_WIN, true);

    } else if (m_showMe == BuildTabSettingsData::ShowOnEnd &&
               m_autoHide &&
               ManagerST::Get()->IsPaneVisible(opane->GetCaption()) &&
               win == this
              ) {
        // user prefers to see build/errors tabs only at end of unsuccessful build
        ManagerST::Get()->HidePane(opane->GetName());
    }
    m_sw.Start();
    
    BuildEventDetails* bed = dynamic_cast<BuildEventDetails*>(e.GetClientObject());
    if ( bed ) {
        // notify the plugins that the build had started
        clBuildEvent buildEvent(wxEVT_BUILD_STARTED);
        buildEvent.SetProjectName( bed->GetProjectName() );
        buildEvent.SetConfigurationName( bed->GetConfiguration() );
        EventNotifier::Get()->AddPendingEvent( buildEvent );
    }
}
Ejemplo n.º 5
0
void DebuggerCallstackView::OnUpdateBacktrace(clCommandEvent& e)
{
    e.Skip();
    Update(static_cast<DebuggerEventData*>(e.GetClientObject())->m_stack);
}