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 BreakptMgr::GetAllMemoryBreakpoints(BreakpointInfoVec_t& memoryBps) { BreakpointInfoVec_t allBps; // Start by finding all on the line GetBreakpoints(allBps); for(size_t i=0; i<allBps.size(); i++) { BreakpointInfo &bp = allBps.at(i); if ( !bp.memory_address.IsEmpty() ) { memoryBps.push_back( bp ); } } }