【问题标题】:Xcode lldb error in lauch program启动程序中的 Xcode lldb 错误
【发布时间】:2013-06-19 00:41:24
【问题描述】:

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

XCode: Could not launch "APP_X_Y" - 'A' packet returned an error: -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 最新的

请分享您的想法。

【问题讨论】:

  • 您使用的是最新版本的 Xcode 吗?那应该是4.6.3。如果没有,请更新。
  • 是的,我正在使用最新的任何想法?

标签: xcode macos lldb


【解决方案1】:

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

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

如果您更改了 /etc/hosts 文件,请检查其中是否有类似 127.0.0.1 localhost 的行。有些人修改了他们的/etc/hosts(我不知道为什么)并删除了这一行,这导致lldb试图与调试服务器通信时出现问题。

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

【讨论】:

  • 感谢至少一个答案,我没有自己构建 lldb(默认设置)/etc/hosts 状态良好 127.0.0.1 localhost,这里是 Console.app 日志:user.local com.apple.debugserver-200[5547]:x86_64 的 debugserver-200。 user.local com.apple.debugserver-200[5547]:监听 40485 端口……那么问题出在哪里?
  • 尝试从 /Applications 打开 TextEdit。然后在终端中查看/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/debugserver localhost:1234 --attach=Textedit 是否有效。如果 debugserver 无法附加到 TextEdit,则根本无法进行调试。
  • 这里是输出:./debugserver localhost:1234 --attach=Textedit debugserver-200 for x86_64。正在监听 1234 端口...
  • 看起来不像是权限问题。您可以尝试通过在 /tmp 中创建一个无操作的 a.out 二进制文件来更接近 Xcode 正在使用的代码路径,然后执行 .../debugserver localhost:1234 /tmp/a.out 然后在另一个终端中执行 xcrun lldb /tmp/a.out; (lldb) gdb-remote 1234b mainc。但是您可能需要收集显示 lldb 和 Xcode 之间数据包的日志文件,并在 bugreport.apple.com 提交错误报告。将 log enable -f /tmp/packets.txt gdb-remote packets 放入您的 ~/.lldbinit,启动 Xcode、repo,并将该日志文件附加到错误报告中。
  • 我建议您尝试了解问题的范围。是你的系统吗?你的项目?创建一个新的 Mac 应用程序(新建 > 项目 > 一个示例 Cocoa 应用程序),你可以在 Xcode 中启动它吗?在断点处停止?你可以从 Xcode 中附加到像 TextEdit 这样的进程吗?模拟器应用程序怎么样——启动和附加? iOS 设备应用程序如何启动和附加?我的猜测是您没有 complete 调试器失败,有一些特定的组合不起作用,找到有效的和无效的将有助于缩小问题的范围。跨度>
【解决方案2】:

我也遇到了同样的情况。在我的情况下,它发生在更新到 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 运行调试正常。

【讨论】:

  • 路径错误“/Applications/Xcode.app”改为“/Applications/Xcode.app/Contents/Developer”
猜你喜欢
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2014-09-17
  • 2010-10-23
  • 2021-08-11
  • 2013-01-17
相关资源
最近更新 更多