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

Mr_*_*uet 2 macos ios lldb

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

类似的问题,但对于gdb:gdb附加到一个没有停止的进程.

使用版本:

lldb -v
  lldb-900.3.72
Run Code Online (Sandbox Code Playgroud)

Kri*_*oks 5

这是不可能的x86_64ARMv8-A(我在这里做出一个假设,但它代表了大多数现代OS设计/架构).

通常,任何时候进程(暂时忘记实时的东西)进行系统调用或被中断(这可能以多种方式发生,在抢占式操作系统中)它将产生操作系统,此时有一个不确定的时间段在执行返回到该点之前,取决于系统状态和调度程序决定的内容(基于诸如时间和优先级之类的事情),它可能花费时间做其他事情.

您应该立即附加并继续执行.如果不引入某种形式的抖动,就没有办法做你真正想要的事情(即使启动LLDB本身也可能发生在同一个CPU上,你最后"运行"的过程).

这就是为什么种族条件是一种调试的痛苦,因为它们一直很难重现.调试时有一些方法可以将抖动降至最低,但它们涉及相当复杂的,通常是特定于操作系统的工具.

我还建议寻求ThreadSanitizer帮助找到潜在的竞争条件.