[Lldb-commits] [lldb] Refactor LLDB Breakpoint Event Notifications to centralize and eliminate code duplication (PR #164739)
Piyush Jaiswal via lldb-commits
lldb-commits at lists.llvm.org
Thu Oct 23 13:12:43 PDT 2025
https://github.com/piyushjaiswal98 updated https://github.com/llvm/llvm-project/pull/164739
>From e04bbb2579b91a08a99fd208739a17313de969ab Mon Sep 17 00:00:00 2001
From: Piyush Jaiswal <piyushjais at meta.com>
Date: Wed, 22 Oct 2025 17:37:29 -0700
Subject: [PATCH 1/2] Refactor Breakpoint event notification
---
lldb/include/lldb/Target/Target.h | 15 +++++++++++++++
lldb/source/Breakpoint/Breakpoint.cpp | 11 ++++-------
lldb/source/Breakpoint/BreakpointList.cpp | 7 +------
lldb/source/Breakpoint/BreakpointLocation.cpp | 6 ++----
lldb/source/Target/Target.cpp | 17 +++++++++++++++++
5 files changed, 39 insertions(+), 17 deletions(-)
diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h
index f4a09237ce897..88267c3ab74f8 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -1346,6 +1346,21 @@ class Target : public std::enable_shared_from_this<Target>,
const lldb_private::RegisterFlags &flags,
uint32_t byte_size);
+ /// Sends a breakpoint notification event if any listener is registered.
+ /// \param[in] bp
+ /// The breakpoint that was hit.
+ /// \param[in] eventKind
+ /// The kind of event that occurred.
+ void NotifyBreakpointChanged(Breakpoint &bp,
+ lldb::BreakpointEventType eventKind);
+ /// Sends a breakpoint notification event if any listener is registered.
+ /// \param[in] bp
+ /// The breakpoint that was hit.
+ /// \param[in] data
+ /// The data associated with the event.
+ void NotifyBreakpointChanged(Breakpoint &bp,
+ const lldb::EventDataSP &breakpoint_data_sp);
+
llvm::Expected<lldb::DisassemblerSP>
ReadInstructions(const Address &start_addr, uint32_t count,
const char *flavor_string = nullptr);
diff --git a/lldb/source/Breakpoint/Breakpoint.cpp b/lldb/source/Breakpoint/Breakpoint.cpp
index b23d1143d60c4..9306335888d77 100644
--- a/lldb/source/Breakpoint/Breakpoint.cpp
+++ b/lldb/source/Breakpoint/Breakpoint.cpp
@@ -1099,12 +1099,11 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) {
void Breakpoint::SendBreakpointChangedEvent(
lldb::BreakpointEventType eventKind) {
- if (!IsInternal() && GetTarget().EventTypeHasListeners(
- Target::eBroadcastBitBreakpointChanged)) {
+ if (!IsInternal()) {
std::shared_ptr<BreakpointEventData> data =
std::make_shared<BreakpointEventData>(eventKind, shared_from_this());
- GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data);
+ GetTarget().NotifyBreakpointChanged(*this, eventKind);
}
}
@@ -1113,10 +1112,8 @@ void Breakpoint::SendBreakpointChangedEvent(
if (!breakpoint_data_sp)
return;
- if (!IsInternal() &&
- GetTarget().EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged))
- GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged,
- breakpoint_data_sp);
+ if (!IsInternal())
+ GetTarget().NotifyBreakpointChanged(*this, breakpoint_data_sp);
}
const char *Breakpoint::BreakpointEventTypeAsCString(BreakpointEventType type) {
diff --git a/lldb/source/Breakpoint/BreakpointList.cpp b/lldb/source/Breakpoint/BreakpointList.cpp
index 779490ae0316a..8fb01e97c40ca 100644
--- a/lldb/source/Breakpoint/BreakpointList.cpp
+++ b/lldb/source/Breakpoint/BreakpointList.cpp
@@ -17,12 +17,7 @@ using namespace lldb_private;
static void NotifyChange(const BreakpointSP &bp, BreakpointEventType event) {
Target &target = bp->GetTarget();
- if (target.EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) {
- auto event_data_sp =
- std::make_shared<Breakpoint::BreakpointEventData>(event, bp);
- target.BroadcastEvent(Target::eBroadcastBitBreakpointChanged,
- event_data_sp);
- }
+ target.NotifyBreakpointChanged(*bp, event);
}
BreakpointList::BreakpointList(bool is_internal)
diff --git a/lldb/source/Breakpoint/BreakpointLocation.cpp b/lldb/source/Breakpoint/BreakpointLocation.cpp
index 22c98acda8c59..f25209c15e007 100644
--- a/lldb/source/Breakpoint/BreakpointLocation.cpp
+++ b/lldb/source/Breakpoint/BreakpointLocation.cpp
@@ -749,13 +749,11 @@ void BreakpointLocation::Dump(Stream *s) const {
void BreakpointLocation::SendBreakpointLocationChangedEvent(
lldb::BreakpointEventType eventKind) {
- if (!m_owner.IsInternal() && m_owner.GetTarget().EventTypeHasListeners(
- Target::eBroadcastBitBreakpointChanged)) {
+ if (!m_owner.IsInternal()) {
auto data_sp = std::make_shared<Breakpoint::BreakpointEventData>(
eventKind, m_owner.shared_from_this());
data_sp->GetBreakpointLocationCollection().Add(shared_from_this());
- m_owner.GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged,
- data_sp);
+ m_owner.GetTarget().NotifyBreakpointChanged(m_owner, data_sp);
}
}
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index e224a12e33463..0b408a9521eb9 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/Target/Target.h"
+#include "lldb/Breakpoint/Breakpoint.h"
#include "lldb/Breakpoint/BreakpointIDList.h"
#include "lldb/Breakpoint/BreakpointPrecondition.h"
#include "lldb/Breakpoint/BreakpointResolver.h"
@@ -5244,3 +5245,19 @@ void Target::ClearSectionLoadList() { GetSectionLoadList().Clear(); }
void Target::DumpSectionLoadList(Stream &s) {
GetSectionLoadList().Dump(s, this);
}
+
+void Target::NotifyBreakpointChanged(Breakpoint &bp,
+ lldb::BreakpointEventType eventKind) {
+ if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) {
+ std::shared_ptr<Breakpoint::BreakpointEventData> data =
+ std::make_shared<Breakpoint::BreakpointEventData>(
+ eventKind, bp.shared_from_this());
+ BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data);
+ }
+}
+
+void Target::NotifyBreakpointChanged(
+ Breakpoint &bp, const lldb::EventDataSP &breakpoint_data_sp) {
+ if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged))
+ BroadcastEvent(Target::eBroadcastBitBreakpointChanged, breakpoint_data_sp);
+}
>From 487b285cea66fa3881c8f38df995b65d0025654c Mon Sep 17 00:00:00 2001
From: Piyush Jaiswal <piyushjais at meta.com>
Date: Thu, 23 Oct 2025 13:08:45 -0700
Subject: [PATCH 2/2] Remove redundant lines of code and update comments
---
lldb/include/lldb/Target/Target.h | 4 ++--
lldb/source/Breakpoint/Breakpoint.cpp | 3 ---
lldb/source/Breakpoint/BreakpointList.cpp | 3 +--
lldb/source/Target/Target.cpp | 4 ++--
4 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h
index 88267c3ab74f8..4d4355212a70b 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -1348,14 +1348,14 @@ class Target : public std::enable_shared_from_this<Target>,
/// Sends a breakpoint notification event if any listener is registered.
/// \param[in] bp
- /// The breakpoint that was hit.
+ /// The breakpoint to send a nofication for.
/// \param[in] eventKind
/// The kind of event that occurred.
void NotifyBreakpointChanged(Breakpoint &bp,
lldb::BreakpointEventType eventKind);
/// Sends a breakpoint notification event if any listener is registered.
/// \param[in] bp
- /// The breakpoint that was hit.
+ /// The breakpoint that has changed.
/// \param[in] data
/// The data associated with the event.
void NotifyBreakpointChanged(Breakpoint &bp,
diff --git a/lldb/source/Breakpoint/Breakpoint.cpp b/lldb/source/Breakpoint/Breakpoint.cpp
index 9306335888d77..63604bfb406e5 100644
--- a/lldb/source/Breakpoint/Breakpoint.cpp
+++ b/lldb/source/Breakpoint/Breakpoint.cpp
@@ -1100,9 +1100,6 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) {
void Breakpoint::SendBreakpointChangedEvent(
lldb::BreakpointEventType eventKind) {
if (!IsInternal()) {
- std::shared_ptr<BreakpointEventData> data =
- std::make_shared<BreakpointEventData>(eventKind, shared_from_this());
-
GetTarget().NotifyBreakpointChanged(*this, eventKind);
}
}
diff --git a/lldb/source/Breakpoint/BreakpointList.cpp b/lldb/source/Breakpoint/BreakpointList.cpp
index 8fb01e97c40ca..e3dd62bfa329d 100644
--- a/lldb/source/Breakpoint/BreakpointList.cpp
+++ b/lldb/source/Breakpoint/BreakpointList.cpp
@@ -16,8 +16,7 @@ using namespace lldb;
using namespace lldb_private;
static void NotifyChange(const BreakpointSP &bp, BreakpointEventType event) {
- Target &target = bp->GetTarget();
- target.NotifyBreakpointChanged(*bp, event);
+ bp->GetTarget().NotifyBreakpointChanged(*bp, event);
}
BreakpointList::BreakpointList(bool is_internal)
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 0b408a9521eb9..8780d46afb331 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -5249,10 +5249,10 @@ void Target::DumpSectionLoadList(Stream &s) {
void Target::NotifyBreakpointChanged(Breakpoint &bp,
lldb::BreakpointEventType eventKind) {
if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) {
- std::shared_ptr<Breakpoint::BreakpointEventData> data =
+ std::shared_ptr<Breakpoint::BreakpointEventData> data_sp =
std::make_shared<Breakpoint::BreakpointEventData>(
eventKind, bp.shared_from_this());
- BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data);
+ BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data_sp);
}
}
More information about the lldb-commits
mailing list