31

在我的程序中,我需要创建套接字并将它们绑定到监听 HTTP 端口(80)。当我使用 sudo 从命令行启动该程序时,该程序运行良好,将权限升级为 root。在 XCode 下运行会在调用绑定函数 (asio::ip::tcp::acceptor::bind()) 时出现“权限被拒绝”错误。

如何在 XCode 下进行调试?

所有在 Mac OS X 10.5 和 XCode 3.1.2 上的 C++ 和 boost.asio 完成。

4

6 回答 6

27

在 Xcode 4.5 Product->Edit Scheme中:查看Debug Process As下的Info选项卡,然后选择root选项。

于 2012-12-28T10:54:53.907 回答
25

更新:对于 Xcode 4.5 及更高版本,请参阅此答案


我知道做你要求的唯一方法是以root身份运行Xcode。

>> sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode

一旦你以 root 身份运行,任何从 Xcode 启动的进程也将以 root 身份运行。但是请注意,如果您创建或编辑任何文件,它们将归根用户所有,这意味着您必须先拥有chown它们,然后才能首先以普通用户身份编辑它们。

我希望 Xcode 有一种方式可以说“以 root 身份启动进程”,但据我所知,没有这样的功能可用。

请注意,您还可以在命令行调试器中运行应用程序gdb来调试您的应用程序。跑

>> sudo gdb /path/to/my/application

然后你可以保持 Xcode 打开,随意修改,并在 gdb 中调试你的程序。这是我通常做的。

编辑:来自未来的读者:请参阅 Alexander Stavonin 的答案;它谈到了如何做到这一点。如果您可以使用 ssh 密钥并在系统上启用 root 用户,那么他的答案就是您要走的路。

于 2009-06-23T14:54:46.337 回答
15

Xcode 能够以 root 身份运行调试应用程序。为此,应执行以下步骤:

  1. 为本地机器启用 root 用户。

    一种。运行“目录实用程序”(/System/Library/CoreServices/Directory Utility.app)

    湾。从“编辑”菜单中选择“启用 Root 用户”并输入 root 密码。

  2. 启用远程登录。

    一种。在系统偏好设置... -> 共享中,选中远程登录。此选项打开 ssh 恶魔。

  3. 在 .ssh/authorized_keys 文件夹中为 root 用户创建 ssh 公钥/私钥并复制公钥。

    一种。在本地机器上打开终端并输入ssh-keygen -t rsa

    湾。接受默认位置并输入 root 密码。

    C。以 root 身份登录su -并创建 ~/.ssh 目录。(~ == /var/root)

    d。将公钥复制到根目录:cat ~/.ssh/id_rsa.pub | ssh root@localhost "cat - >> ~/.ssh/authorized_keys"

    e. 检查是否一切正常。键入ssh root@localhost。它不应该要求输入 root 密码。

  4. 在 Xcode 中通过 ssh 启用远程调试。

    一种。从«可执行文件»的下拉菜单中选择«获取信息»。

    湾。在“调试”设置中检查«通过 ssh 远程调试可执行文件»并将 root@localhost 作为«连接到»信息。

  5. 现在一切都应该好了☺</p>

来自博客

于 2009-12-08T11:02:33.767 回答
3

XCode 不再支持远程调试渲染这些答案中的大多数已过时。

以 root 身份调试程序现在很容易。在产品菜单下,使用“编辑方案...”,然后在“运行”方案的“信息”窗格中,选择“以 root 身份调试进程”。您必须进行一次身份验证。

从 Xcode 4.5 开始,我遇到了一个奇怪的错误,直到我完全 Xcode 并重新启动。

于 2012-10-01T20:54:39.490 回答
0

通过 SSH 以 root 身份进行调试。

编辑活动可执行文件 -> 调试 -> 通过 SSH 远程调试可执行文件。

于 2009-11-20T11:45:19.460 回答
0

如果要调试在端口 443 上运行的 Web 服务器,则可以改为在普通帐户的端口 8443 上运行它,然后执行以下操作: sudo ssh user@localhost -L 443:localhost:8443 -N

然后您仍然可以在正确的端口上联系您的应用程序,但具有以普通用户身份运行应用程序的优势。

于 2012-03-14T13:30:11.923 回答