[Lldb-commits] [lldb] [lldb-dap] Detect if we can automatically attach to targets. (PR #170792)

via lldb-commits lldb-commits at lists.llvm.org
Thu Dec 4 17:52:09 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: John Harrison (ashgti)

<details>
<summary>Changes</summary>

The new support for automatically attaching to targets during a debug session is not guarded on how lldb-dap is running. If its running over stdio then this feature will not work.

Instead, I added a message to the console and skip attempting to attach.

---
Full diff: https://github.com/llvm/llvm-project/pull/170792.diff


3 Files Affected:

- (modified) lldb/tools/lldb-dap/DAPSessionManager.h (+4) 
- (modified) lldb/tools/lldb-dap/EventHelper.cpp (+7) 
- (modified) lldb/tools/lldb-dap/tool/lldb-dap.cpp (+2) 


``````````diff
diff --git a/lldb/tools/lldb-dap/DAPSessionManager.h b/lldb/tools/lldb-dap/DAPSessionManager.h
index ad76b081ad78b..193a1c7ebce5a 100644
--- a/lldb/tools/lldb-dap/DAPSessionManager.h
+++ b/lldb/tools/lldb-dap/DAPSessionManager.h
@@ -59,6 +59,9 @@ class DAPSessionManager {
   /// Get the singleton instance of the DAP session manager.
   static DAPSessionManager &GetInstance();
 
+  void SetServerMode() { m_server_mode = true; }
+  bool GetServerMode() { return m_server_mode; }
+
   /// Register a DAP session.
   void RegisterSession(lldb_private::MainLoop *loop, DAP *dap);
 
@@ -103,6 +106,7 @@ class DAPSessionManager {
   DAPSessionManager(DAPSessionManager &&) = delete;
   DAPSessionManager &operator=(DAPSessionManager &&) = delete;
 
+  bool m_server_mode = false;
   bool m_client_failed = false;
   std::mutex m_sessions_mutex;
   std::condition_variable m_sessions_condition;
diff --git a/lldb/tools/lldb-dap/EventHelper.cpp b/lldb/tools/lldb-dap/EventHelper.cpp
index bdb6bb55fe168..526e406031b7a 100644
--- a/lldb/tools/lldb-dap/EventHelper.cpp
+++ b/lldb/tools/lldb-dap/EventHelper.cpp
@@ -449,6 +449,13 @@ void HandleTargetEvent(const lldb::SBEvent &event, Log *log) {
       }
     }
   } else if (event_mask & lldb::SBTarget::eBroadcastBitNewTargetCreated) {
+    if (!DAPSessionManager::GetInstance().GetServerMode()) {
+      dap->SendOutput(OutputType::Console,
+                      "lldb-dap: Enable server mode for automatically "
+                      "attaching to new debugger targets.");
+      return;
+    }
+
     // For NewTargetCreated events, GetTargetFromEvent returns the parent
     // target, and GetCreatedTargetFromEvent returns the newly created target.
     lldb::SBTarget created_target =
diff --git a/lldb/tools/lldb-dap/tool/lldb-dap.cpp b/lldb/tools/lldb-dap/tool/lldb-dap.cpp
index 27516b2a25678..2499b4dd12e6b 100644
--- a/lldb/tools/lldb-dap/tool/lldb-dap.cpp
+++ b/lldb/tools/lldb-dap/tool/lldb-dap.cpp
@@ -425,6 +425,8 @@ static llvm::Error serveConnection(
     return status.takeError();
   }
 
+  DAPSessionManager::GetInstance().SetServerMode();
+
   std::string address = llvm::join(listener->GetListeningConnectionURI(), ", ");
   DAP_LOG(log, "started with connection listeners {0}", address);
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/170792


More information about the lldb-commits mailing list