LLDB - 如何在不停止进程的情况下附加到进程
LLDB - How to attach to a process without stopping it
我正在寻找一种方法来使用 lldb 附加到进程而不停止它。我正在调试的程序存在竞争条件,我担心暂停会导致更多熵。
类似问题,但针对 gdb:gdb attach to a process without stop.
使用的版本:
lldb -v
lldb-900.3.72
这在 x86_64
或 ARMv8-A
上是不可能的(我在这里做一个假设,但它代表最现代的 OS designs/architectures)。
一般来说,任何时候进程(暂时忘掉实时的东西)进行系统调用或被中断(在抢占式操作系统中,这可能以多种方式发生)它都会屈服于 OS在这一点上,它可能会花费一段不确定的时间来做其他事情,这取决于系统状态和调度程序在执行之前决定的内容(基于时间和优先级等)returns 到那个点。
您应该立即附加并恢复执行。如果不引入某种形式的抖动,就没有办法做你真正想做的事情(即使启动 LLDB 本身也可能发生在你上次 "running" 之后的同一 CPU 上)。
这就是为什么竞争条件很难调试,因为它们很难一致地重现。有一些方法可以在调试时将抖动降至最低,但它们涉及相当复杂,通常是 OS 特定工具。
我还建议调查 ThreadSanitizer
以帮助找到潜在的竞争条件。
我正在寻找一种方法来使用 lldb 附加到进程而不停止它。我正在调试的程序存在竞争条件,我担心暂停会导致更多熵。
类似问题,但针对 gdb:gdb attach to a process without stop.
使用的版本:
lldb -v
lldb-900.3.72
这在 x86_64
或 ARMv8-A
上是不可能的(我在这里做一个假设,但它代表最现代的 OS designs/architectures)。
一般来说,任何时候进程(暂时忘掉实时的东西)进行系统调用或被中断(在抢占式操作系统中,这可能以多种方式发生)它都会屈服于 OS在这一点上,它可能会花费一段不确定的时间来做其他事情,这取决于系统状态和调度程序在执行之前决定的内容(基于时间和优先级等)returns 到那个点。
您应该立即附加并恢复执行。如果不引入某种形式的抖动,就没有办法做你真正想做的事情(即使启动 LLDB 本身也可能发生在你上次 "running" 之后的同一 CPU 上)。
这就是为什么竞争条件很难调试,因为它们很难一致地重现。有一些方法可以在调试时将抖动降至最低,但它们涉及相当复杂,通常是 OS 特定工具。
我还建议调查 ThreadSanitizer
以帮助找到潜在的竞争条件。