在我的程序中,我需要创建套接字并将它们绑定到监听 HTTP 端口(80)。当我使用 sudo 从命令行启动该程序时,该程序运行良好,将权限升级为 root。在 XCode 下运行会在调用绑定函数 (asio::ip::tcp::acceptor::bind()) 时出现“权限被拒绝”错误。
如何在 XCode 下进行调试?
所有在 Mac OS X 10.5 和 XCode 3.1.2 上的 C++ 和 boost.asio 完成。
在 Xcode 4.5 Product->Edit Scheme中:查看Debug Process As下的Info选项卡,然后选择root选项。
更新:对于 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 用户,那么他的答案就是您要走的路。
Xcode 能够以 root 身份运行调试应用程序。为此,应执行以下步骤:
为本地机器启用 root 用户。
一种。运行“目录实用程序”(/System/Library/CoreServices/Directory Utility.app)
湾。从“编辑”菜单中选择“启用 Root 用户”并输入 root 密码。
启用远程登录。
一种。在系统偏好设置... -> 共享中,选中远程登录。此选项打开 ssh 恶魔。
在 .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 密码。
在 Xcode 中通过 ssh 启用远程调试。
一种。从«可执行文件»的下拉菜单中选择«获取信息»。
湾。在“调试”设置中检查«通过 ssh 远程调试可执行文件»并将 root@localhost 作为«连接到»信息。
现在一切都应该好了☺</p>
XCode 不再支持远程调试渲染这些答案中的大多数已过时。
以 root 身份调试程序现在很容易。在产品菜单下,使用“编辑方案...”,然后在“运行”方案的“信息”窗格中,选择“以 root 身份调试进程”。您必须进行一次身份验证。
从 Xcode 4.5 开始,我遇到了一个奇怪的错误,直到我完全 Xcode 并重新启动。
通过 SSH 以 root 身份进行调试。
编辑活动可执行文件 -> 调试 -> 通过 SSH 远程调试可执行文件。
如果要调试在端口 443 上运行的 Web 服务器,则可以改为在普通帐户的端口 8443 上运行它,然后执行以下操作: sudo ssh user@localhost -L 443:localhost:8443 -N
然后您仍然可以在正确的端口上联系您的应用程序,但具有以普通用户身份运行应用程序的优势。