使用lldb进行远程调试-等待进程

7
我知道如何等待并附加到本地进程(process attach --name procname --waitfor)。
我也知道如何运行远程debugserver并连接到它。
但是,我该如何等待远程主机上的进程启动并附加到它?
编辑
我已经尝试了@Jim's suggestion,似乎调试服务器确实在尝试附加但失败了。
我接受他的答案,因为它是正确的,但我很想知道为什么我无法真正调试该进程。
FYI,我正在尝试在JB iPhone上调试mdmd(mdm守护程序服务)。该进程启动几秒钟以与mdm服务器通信,然后死亡。
这是来自目标终端的信息:

~ root# debugserver *:1234
debugserver-310.2 for arm64.
Listening to port 1234 for a connection from *...
Got a connection, waiting for process information for launching or attaching.
Attach succeeded, ready to debug.
Exiting.

这是来自于lldb的信息:

(lldb) process connect connect://localhost:1234
(lldb) process attach --name mdmd --waitfor
error: attach failed: unable to attach


通常守护进程会标记自己为不可调试,因此在任何最近的基于Darwin的系统上,我都会预期附加操作会被拒绝。例如,如果您尝试在OS X上执行此操作,即使作为root用户,您也会收到相同的错误。但是我没有使用越狱设备的经验。 - Jim Ingham
你解决了吗?我也遇到了类似的问题。我在Linux上运行lldb客户端,而在Android上运行lldb服务器,不知道这是否有影响。 - Kuri
2个回答

9

最简单的方法是仅使用要连接的端口启动远程debugserver,而不使用其他参数。 在这种模式下,它完全由连接到它的lldb驱动。 因此,只需执行以下操作:

(lldb) process attach --name procname --waitfor

这将指示远程调试服务器等待该进程出现,然后附加到它。


1
这并不是直接回答你的问题,但其他人可能会发现它有用。在您越狱的设备上(使用Electra iOS11 JB),您可以以稍微不同的顺序发出wait-for命令... 这使您能够在越狱设备上通过USB进行调试。
### On macOS machine
iproxy 6666 6666 &  (google `iproxy` to find setup instructions)

### On Jailbroken device
root# /Developer/usr/bin/debugserver localhost:6666 -waitfor APPNAME
< now open the app >

### on macOS machine
lldb
(lldb) process connect connect://localhost:6666

当你开始应用程序启动时,这很棒。然而,缺点是lldb无法控制STDOUT。不要期望NSLog会显示在lldb屏幕上。它将显示在Console.app上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接