如何附加到 LLDB 中的子进程

Posted

技术标签:

【中文标题】如何附加到 LLDB 中的子进程【英文标题】:How to attach to child process in LLDB 【发布时间】:2013-01-22 16:03:34 【问题描述】:

我的进程启动子进程,我也想调试它们,在 OS X 上使用 LLDB。我在调试器中找不到任何自动附加选项。怎么做?

【问题讨论】:

相关:lldb equivalent of gdb's "follow-fork-mode" or "detach-on-fork" 【参考方案1】:

https://bugs.llvm.org/show_bug.cgi?id=17972 似乎是一个相关的 LLDB 问题。

【讨论】:

【参考方案2】:

Google 在这个问题上确实保持沉默,但我找到了解决方法。

运行您的主进程并在它衍生出任何子进程之前停止它。然后在函数fork上下断点:

b fork

然后让程序继续。当它即将启动一个子进程时,将触发断点。此时,运行另一个 LLDB 实例并让它等待并自动附加到您的进程:

attach -w -n yourapp

现在让父程序继续。

【讨论】:

我应该如何创建lldb的另一个实例? 打开另一个终端窗口并在命令行中运行lldb attach -w -n 语法适用于 gdb。在 lldb 中是process attach -n myapp -w,可以缩写为pro at -n myapp -w。 lldb.llvm.org/lldb-gdb.html 我很难让 lldb 附加,因为我的子进程立即崩溃 (attach failed: process did not stop (no such process or permission problem?)。添加sleep 调用以减慢速度,从而使 lldb 有时间附加。 当我尝试这个时,我得到“错误:附加失败:失去连接。”

以上是关于如何附加到 LLDB 中的子进程的主要内容,如果未能解决你的问题,请参考以下文章

Xcode lldb 无法附加到 MacOS 系统程序 /bin/cp -“不允许附加到进程。”

如何在其他网络命名空间中的子进程与父进程之间正确通信?

创建一个不是创建进程子进程的新进程

关于wait 和 exit

golang 热重启

Linux学习-进程管理