1

我正在尝试在多个物理设备上并行执行 iOS 应用程序。在过去(XCode 4.3 和 iOS 6),我通过使用 gdb 调试器(iOS 6.1.3 和更低版本)的fruitstrap 完成了这一任务。在 XCode 5 中,Apple 删除了gdb 调试器并用lldb 调试器替换了它。

我重构了我的 fruitstrap 脚本,它可以与 lldb 调试器一起使用。但是,无法并行执行多个 lldb 进程。我在 lldb 控制台中收到以下错误消息:

(lldb) run
error: a process is already being debugged


我可以在 [apple source code}( 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也是如此)?

任何帮助或想法表示赞赏:-)

4

1 回答 1

4

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

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

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

于 2013-10-14T22:29:20.187 回答