================
@@ -227,6 +230,58 @@ ProcessWindows::DoAttachToProcessWithID(lldb::pid_t pid,
   return error;
 }
 
+Status ProcessWindows::DoAttachToProcessWithName(
+    const char *process_name, const ProcessAttachInfo &attach_info) {
+  Status error;
+  Clear();
+
+  if (!process_name || process_name[0] == '\0') {
+    error = Status::FromErrorString("Invalid process name");
+    return error;
+  }
+
+  ProcessInstanceInfoMatch match_info;
+  match_info.SetNameMatchType(NameMatch::Equals);
+  match_info.GetProcessInfo().GetExecutableFile().SetFile(
+      process_name, FileSpec::Style::native);
+
+  Log *log = GetLog(LLDBLog::Process);
+  LLDB_LOGF(log, "ProcessWindows::%s waiting for process '%s' to launch",
+            __FUNCTION__, process_name);
+
+  lldb::pid_t pid = LLDB_INVALID_PROCESS_ID;
+  while (pid == LLDB_INVALID_PROCESS_ID) {
+    ProcessInstanceInfoList process_infos;
+    uint32_t num_matches = Host::FindProcesses(match_info, process_infos);
+
+    if (num_matches == 1) {
+      pid = process_infos[0].GetProcessID();
+      break;
+    }
+    if (num_matches > 1) {
+      StreamString s;
+      ProcessInstanceInfo::DumpTableHeader(s, true, false);
+      for (size_t i = 0; i < num_matches; i++) {
+        process_infos[i].DumpAsTableRow(
+            s, lldb_private::HostInfoWindows::GetUserIDResolver(), true, 
false);
+      }
+      error = Status::FromErrorStringWithFormat(
+          "more than one process named %s:\n%s", process_name, s.GetData());
+      break;
+    }
+
+    std::this_thread::sleep_for(std::chrono::milliseconds(100));
----------------
charles-zablit wrote:

I am not sure. I don't see anything that prevents us from doing it: a lot of 
the logic is implemented through Windows API calls in 
`windows/common/DebuggerThread.cpp`.

It is certainly a lot of work, which I think would be worth doing simply for 
the sake of matching the POSIX implementations (async mechanisms, etc). In the 
Swift fork, `print` does not work in the REPL on Windows because we are not 
using `ProcessGDBRemote`.

I will start by creating a thread on the forums to see if anyone has attempted 
that before.

https://github.com/llvm/llvm-project/pull/173015
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to