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); } } }
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); }
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); }
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 ); } }
void DebuggerCallstackView::OnUpdateBacktrace(clCommandEvent& e) { e.Skip(); Update(static_cast<DebuggerEventData*>(e.GetClientObject())->m_stack); }