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