并行运行多个lldb进程

时间:2013-10-04 01:51:06

标签: ios xcode parallel-processing gdb lldb

我正试图在多个物理设备上并行执行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;
        }            
    }


问题

  • 有没有人想出如何并行运行多个lldb进程?
  • 是否有其他工具可以在多个物理设备上并行启动iOS应用程序,iOS 6和iOS 7兼容,可以通过命令行执行? (XCTest仅适用于iOS 7,Instruments不接受并行的多个进程,过去的gdb中也使用libimobiledevice)?

感谢任何帮助或想法: - )

1 个答案:

答案 0 :(得分:2)

lldb每个目标只支持一个进程,但是你可以同时拥有任意数量的目标(使用相同的可执行文件或不同的文件)。从命令行可以使用“target create”创建新目标(“file”命令只是“target create”的别名),“target list”列出它们,“target select”选择你的目标想要,然后所有执行控制和检查命令都在当前选定的目标上工作。

对于gdb,您必须每个进程运行一个gdb,因为gdb一次不支持多个进程。你也可以运行多个lldb,认为没有必要,目标将共享任何常见的调试信息,因此在一个lldb会话中运行一堆目标/进程会更有效。

注意,如果您正在编写脚本,那么使用lldb Python API可能会更容易。