1

当我尝试从 xcode 启动我的应用程序(c++ 命令行)时,我收到了 smilar 错误,(应用程序从终端正常工作。

XCode:无法启动“APP_X_Y”-“A”数据包返回错误:-1

我尝试了上述问题中提到的所有解决方案,但没有一个对我有帮助。

我终于发现问题是使用 LLDB 启动,所以 GDB 工作正常。但我想使用 LLDB 调试我的程序并在 xcode 中使用默认配置启动。

错误出现在以下 lldb 函数中:

Error
PlatformRemoteGDBServer::LaunchProcess (ProcessLaunchInfo &launch_info)
{
    Error error;
    lldb::pid_t pid = LLDB_INVALID_PROCESS_ID;

    m_gdb_client.SetSTDIN ("/dev/null");
    m_gdb_client.SetSTDOUT ("/dev/null");
    m_gdb_client.SetSTDERR ("/dev/null");
    m_gdb_client.SetDisableASLR (launch_info.GetFlags().Test (eLaunchFlagDisableASLR));

    const char *working_dir = launch_info.GetWorkingDirectory();
    if (working_dir && working_dir[0])
    {
        m_gdb_client.SetWorkingDir (working_dir);
    }

    // Send the environment and the program + arguments after we connect
    const char **argv = launch_info.GetArguments().GetConstArgumentVector();
    const char **envp = launch_info.GetEnvironmentEntries().GetConstArgumentVector();

    if (envp)
    {
        const char *env_entry;
        for (int i=0; (env_entry = envp[i]); ++i)
        {
            if (m_gdb_client.SendEnvironmentPacket(env_entry) != 0)
                break;
        }
    }
    const uint32_t old_packet_timeout = m_gdb_client.SetPacketTimeout (5);
    int arg_packet_err = m_gdb_client.SendArgumentsPacket (argv);
    m_gdb_client.SetPacketTimeout (old_packet_timeout);
    if (arg_packet_err == 0)
    {
        std::string error_str;
        if (m_gdb_client.GetLaunchSuccess (error_str))
        {
            pid = m_gdb_client.GetCurrentProcessID ();
            if (pid != LLDB_INVALID_PROCESS_ID)
                launch_info.SetProcessID (pid);
        }
        else
        {
            error.SetErrorString (error_str.c_str());
        }
    }
    else
    {
        **error.SetErrorStringWithFormat("**'A' packet returned an error: %i",** arg_packet_err);**
    }
    return error;
}

如您所见,lldb 中存在“a”数据包错误,现在问题是如何解决此问题?有什么解决方案可以在 xcode 中重新安装/重新配置 LLDB?任何人都可以从 lldb 函数中找到问题所在。

我正在使用最新的 Mac OS + Xcode 4.6.3

请分享你的想法。

4

2 回答 2

2

debugserver无法启动您尝试调试的应用程序时会发生此错误。 debugserver启动、附加、停止、检查和控制流程——这是一个具有所有这些职责的小程序。它通过“gdb 远程协议”与 lldb(可能在 Xcode 内部)进行通信,并带有一些小的扩展。

如果您已经构建了自己的 lldb,则很可能debugserver没有正确的代码签名,因此无法启动应用程序。

如果您更改了/etc/hosts文件,请检查其中是否有类似的行127.0.0.1 localhost。有些人修改了他们的/etc/hosts(我不知道为什么)并删除了这一行,这给 lldb 尝试与 debugserver 通信造成了问题。

否则,检查输出Console.app以查看是否记录了任何有用的消息。

于 2013-06-22T06:40:39.857 回答
1

我也有同样的情况。在我的情况下,它发生在更新到 Xcode 5 之后。毕竟它现在工作正常。

根据Jason Molenda的评论,我按照命令行执行。

运行“xcrun lldb ...”时出现错误:

xcrun error failed to exec real xcrun. (no such file or directory)

谷歌搜索后,我发现了这一点:

xcode-select -print-path
/Developer

因为我的 Xcode 不在那里,所以我做了:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

我不知道为什么,但在我的情况下它并没有立即起作用。退出 Xcode、Terminal 等后,Xcode 运行和调试按预期工作。

于 2013-09-25T01:22:24.153 回答