我正试图在多个物理设备上并行执行iOS应用。在过去(XCode 4.3和iOS 6)中,我使用了fruitstrap,它使用了gdb调试器(iOS 6.1.3及更低版本)。使用XCode 5 Apple删除gdb debugger并将其替换为lldb debugger。
我重构了我的fruitstrap脚本,它与lldb调试器一起工作。但是,并行执行多个lldb进程是不可能的。我在lldb控制台中收到以下错误消息:
(lldb) run
error: a process is already being debugged
我可以在[apple源代码}(http://www.opensource.apple.com/source/lldb/lldb-76/source/API/SBTarget.cpp)中看到他们一次只允许一个进程:
if (sb_process.IsValid())
{
state = sb_process->GetState();
if (sb_process->IsAlive() && state != eStateConnected)
{
if (state == eStateAttaching)
error.SetErrorString ("process attach is in progress");
else
error.SetErrorString ("a process is already being debugged");
sb_process.Clear();
return sb_process;
}
}
的问题
感谢任何帮助或想法: - )
答案 0 :(得分:2)
lldb每个目标只支持一个进程,但是你可以同时拥有任意数量的目标(使用相同的可执行文件或不同的文件)。从命令行可以使用“target create”创建新目标(“file”命令只是“target create”的别名),“target list”列出它们,“target select”选择你的目标想要,然后所有执行控制和检查命令都在当前选定的目标上工作。
对于gdb,您必须每个进程运行一个gdb,因为gdb一次不支持多个进程。你也可以运行多个lldb,认为没有必要,目标将共享任何常见的调试信息,因此在一个lldb会话中运行一堆目标/进程会更有效。
注意,如果您正在编写脚本,那么使用lldb Python API可能会更容易。