[Lldb-commits] [PATCH] D75877: [lldb/Reproducers] Fix replay for process attach workflows

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 9 15:07:53 PDT 2020


JDevlieghere created this revision.
JDevlieghere added reviewers: labath, jasonmolenda.
Herald added a subscriber: teemperor.
Herald added a project: LLDB.

Support replaying debug sessions that attach to an existing process instead of lldb launching the inferior. Bypass the logic that looks for a process with the given name and use an arbitrary PID. The value of the PID doesn't matter as the gdb remote replay infrastructure intercepts the attach and pretends that we're connected to the original process.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D75877

Files:
  lldb/source/Target/Process.cpp
  lldb/test/Shell/Reproducer/Inputs/sleep.c
  lldb/test/Shell/Reproducer/TestAttach.test


Index: lldb/test/Shell/Reproducer/TestAttach.test
===================================================================
--- /dev/null
+++ lldb/test/Shell/Reproducer/TestAttach.test
@@ -0,0 +1,11 @@
+# UNSUPPORTED: system-windows, system-freebsd
+
+# RUN: rm -rf %t.repro
+# RUN: mkdir -p %t
+
+# RUN: %clang_host %S/Inputs/sleep.c -g -o %t/attach.out
+# RUN: python -c 'import os; os.system("%t/attach.out &")'
+
+# RUN: %lldb --capture --capture-path %t.repro -o 'pro att -n attach.out' -o 'reproducer generate' | FileCheck %s
+# RUN: %lldb --replay %t.repro | FileCheck %s
+# CHECK: stop reason = signal SIGSTOP
Index: lldb/test/Shell/Reproducer/Inputs/sleep.c
===================================================================
--- /dev/null
+++ lldb/test/Shell/Reproducer/Inputs/sleep.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+#include <unistd.h>
+
+int main(int argc, char const *argv[]) {
+  sleep(10);
+  return 0;
+}
Index: lldb/source/Target/Process.cpp
===================================================================
--- lldb/source/Target/Process.cpp
+++ lldb/source/Target/Process.cpp
@@ -65,6 +65,7 @@
 #include "lldb/Utility/Log.h"
 #include "lldb/Utility/NameMatches.h"
 #include "lldb/Utility/ProcessInfo.h"
+#include "lldb/Utility/Reproducer.h"
 #include "lldb/Utility/SelectHelper.h"
 #include "lldb/Utility/State.h"
 
@@ -2790,6 +2791,11 @@
           }
           return error;
         }
+      } else if (repro::Reproducer::Instance().IsReplaying()) {
+        // The actual PID doesn't matter, we just need to set it to something
+        // that's not LLDB_INVALID_PROCESS_ID. The GDB remote replay
+        // infrastructure will intercept our attach later on.
+        attach_pid = 1;
       } else {
         ProcessInstanceInfoList process_infos;
         PlatformSP platform_sp(GetTarget().GetPlatform());


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75877.249226.patch
Type: text/x-patch
Size: 1834 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200309/03508da6/attachment.bin>


More information about the lldb-commits mailing list