[Lldb-commits] [lldb] [LLDB] Ptrace seize dead processes on Linux (PR #137041)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Wed May 21 04:46:48 PDT 2025
================
@@ -312,10 +312,27 @@ NativeProcessLinux::Manager::Attach(
Log *log = GetLog(POSIXLog::Process);
LLDB_LOG(log, "pid = {0:x}", pid);
- auto tids_or = NativeProcessLinux::Attach(pid);
- if (!tids_or)
- return tids_or.takeError();
- ArrayRef<::pid_t> tids = *tids_or;
+ // This safety check lets us decide if we should
+ // seize or attach.
+ ProcessInstanceInfo process_info;
+ if (!Host::GetProcessInfo(pid, process_info))
+ return llvm::make_error<StringError>("Unable to read process info",
+ llvm::inconvertibleErrorCode());
+
+ std::vector<::pid_t> tids;
+ // IsCoreDumping is an optional, so check for value then true/false.
+ if (process_info.IsCoreDumping() && *process_info.IsCoreDumping()) {
+ auto attached_or = NativeProcessLinux::Seize(pid);
+ if (!attached_or)
+ return attached_or.takeError();
+ tids = std::move(*attached_or);
+ } else {
+ auto attached_or = NativeProcessLinux::Attach(pid);
+ if (!attached_or)
+ return attached_or.takeError();
+ tids = std::move(*attached_or);
----------------
DavidSpickett wrote:
Can you refactor this to have only one set of `if (!... ... tids = ` lines? Maybe not because the `auto` would resolve to different things.
Maybe you can do:
```
auto attached_or = is_core_dumping ? NativeProcessLinux::Seize(pid) : NativeProcessLinux::Attach(pid);
```
https://github.com/llvm/llvm-project/pull/137041
More information about the lldb-commits
mailing list