2009-06-23 28 views
24

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

如何在XCode下进行调试?

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

回答

23

更新:对于Xcode 4.5及更高版本,请参阅this answer


我意识到要做你所要求的唯一方法就是以root身份运行Xcode。

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

一旦你以root运行,在Xcode推出什么过程也将作为root运行。但是,请注意,如果您创建或编辑任何文件,它们将归root所有,这意味着您必须先将它们编辑为chown,然后才能以普通用户身份编辑它们。

我很想让Xcode说“以root身份启动进程”,但据我所知,没有这样的功能可用。

请注意,您也可以在命令行调试程序gdb内运行该应用程序来调试您的应用程序。运行

​​

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

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

+0

谢谢,但文件所有者的这个问题真的很烦人。 – Anton 2009-06-23 15:03:12

+0

不幸的是,亚历山大的方法似乎不适用于XCode4,所以这个答案中的sudo方法似乎是唯一可行的方法。 – JosephH 2012-01-16 12:53:58

0

通过SSH作为根进行调试。

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

+0

我无法让它工作。我在本页上设置的内容:使用“GDB”时使用“Pipe”作为标准输入/输出,“Checked”通过SSH远程调试可执行文件,连接到:“[email protected]”,“Unchecked”开始调试器。 当我运行我的应用程序时,它显示SSH对话框,但输入密码作为密码给出“验证失败”。我也尝试使用我的用户名,但它不起作用。而且,顺便说一句,该应用程序不会启动。 我在做什么错? – Anton 2009-11-21 12:07:13

13

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

  1. 为本地计算机启用root用户。

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

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

  2. 启用远程登录。

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

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

    a。在本地机器上打开终端并键入ssh-keygen -t rsa

    b。接受默认位置并为根键入密码。

    c。以根用户登录su -并创建〜/ .ssh目录。 (〜==/var/root)

    d。将公钥复制到根:cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

    e。检查一切是否正常。类型ssh [email protected]。它不应该要求输入root密码。

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

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

    b。在“调试”设置中,选中“通过ssh远程调试可执行文件”,然后将root @ localhost作为“连接到”信息。

  5. 一切都应该是好现在☺

From blog

+0

看来我无法在Xcode4上找到«通过ssh远程调试可执行文件»。是吗? – 2011-10-13 15:02:56

0

如果要调试Web服务器端口443上运行,则可以改为在端口8443上您的正常帐户运行它,然后做一个: sudo ssh user @ localhost -L 443:localhost:8443 -N

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

2

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

以root身份调试程序,现在很容易。在产品菜单下,使用“编辑方案...”,在“运行”方案“信息”窗格中,选择“以root身份执行调试过程”。你将不得不认证一次。

从Xcode 4.5开始,我得到一个奇怪的错误,直到我非常Xcode并重新启动。

21

在Xcode的4.5 产品 - >编辑方案:寻找下调试过程中信息标签作为并选择选项。