bool ItaniumABILanguageRuntime::ExceptionBreakpointsExplainStop( lldb::StopInfoSP stop_reason) { if (!m_process) return false; if (!stop_reason || stop_reason->GetStopReason() != eStopReasonBreakpoint) return false; uint64_t break_site_id = stop_reason->GetValue(); return m_process->GetBreakpointSiteList().BreakpointSiteContainsBreakpoint( break_site_id, m_cxx_exception_bp_sp->GetID()); }
bool ItaniumABILanguageRuntime::ExceptionBreakpointsExplainStop (lldb::StopInfoSP stop_reason) { if (!m_process) return false; if (!stop_reason || stop_reason->GetStopReason() != eStopReasonBreakpoint) return false; uint64_t break_site_id = stop_reason->GetValue(); lldb::BreakpointSiteSP bp_site_sp = m_process->GetBreakpointSiteList().FindByID(break_site_id); if (!bp_site_sp) return false; uint32_t num_owners = bp_site_sp->GetNumberOfOwners(); bool check_cxx_exception = false; break_id_t cxx_exception_bid; bool check_cxx_exception_alloc = false; break_id_t cxx_exception_alloc_bid; if (m_cxx_exception_bp_sp) { check_cxx_exception = true; cxx_exception_bid = m_cxx_exception_bp_sp->GetID(); } if (m_cxx_exception_alloc_bp_sp) { check_cxx_exception_alloc = true; cxx_exception_alloc_bid = m_cxx_exception_alloc_bp_sp->GetID(); } for (uint32_t i = 0; i < num_owners; i++) { break_id_t bid = bp_site_sp->GetOwnerAtIndex(i)->GetBreakpoint().GetID(); if ((check_cxx_exception && (bid == cxx_exception_bid)) || (check_cxx_exception_alloc && (bid == cxx_exception_alloc_bid))) return true; } return false; }