LLDB - 如何在不停止进程的情况下附加到进程

LLDB - How to attach to a process without stopping it

我正在寻找一种方法来使用 lldb 附加到进程而不停止它。我正在调试的程序存在竞争条件,我担心暂停会导致更多熵。

类似问题,但针对 gdbgdb attach to a process without stop.

使用的版本:

lldb -v
  lldb-900.3.72

这在 x86_64ARMv8-A 上是不可能的(我在这里做一个假设,但它代表最现代的 OS designs/architectures)。

一般来说,任何时候进程(暂时忘掉实时的东西)进行系统调用或被中断(在抢占式操作系统中,这可能以多种方式发生)它都会屈服于 OS在这一点上,它可能会花费一段不确定的时间来做其他事情,这取决于系统状态和调度程序在执行之前决定的内容(基于时间和优先级等)returns 到那个点。

您应该立即附加并恢复执行。如果不引入某种形式的抖动,就没有办法做你真正想做的事情(即使启动 LLDB 本身也可能发生在你上次 "running" 之后的同一 CPU 上)。

这就是为什么竞争条件很难调试,因为它们很难一致地重现。有一些方法可以在调试时将抖动降至最低,但它们涉及相当复杂,通常是 OS 特定工具。

我还建议调查 ThreadSanitizer 以帮助找到潜在的竞争条件。