ルートとしてのXCodeでのデバッグ
質問
プログラムでは、ソケットを作成し、HTTPポート(80)をリッスンするようにバインドする必要があります。 sudoを使用してコマンドラインから起動すると、プログラムは正常に動作し、権限をルートにエスカレートします。 XCodeで実行すると、バインディング関数(asio :: ip :: tcp :: acceptor :: bind())の呼び出しで「許可が拒否されました」エラーが発生します。
XCodeでデバッグするにはどうすればよいですか
すべては、XCode 3.1.2を搭載したMac OS X 10.5上のC ++およびboost.asioで行われます。
解決
更新:Xcode 4.5以降については、代わりにこの回答を参照してください。
>あなたが求めていることを行うために私が知っている唯一の方法は、ルートとしてXcodeを実行することです。
>> sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode
ルートとして実行すると、Xcodeから起動されたプロセスはすべてルートとしても実行されます。ただし、ファイルを作成または編集する場合、それらのファイルはルートによって所有されます。つまり、最初に通常のユーザーとして編集する前に、 chown
する必要があります。 p>
Xcodeが「rootとしてプロセスを起動」と言う方法が欲しいのですが、私が知る限り、そのような機能は利用できません。
コマンドラインデバッガー gdb
内でアプリケーションを実行して、アプリケーションをデバッグすることもできます。実行
>> sudo gdb /path/to/my/application
Xcodeを開いたままにして、自由に変更し、gdb内でプログラムをデバッグできます。これは私が通常行うことです。
編集:未来の読者:Alexander Stavoninの回答をご覧ください。これを行う方法について説明します。 sshキーで問題がなく、システムでrootユーザーを有効にする場合、彼の答えが道です。
他のヒント
Xcode 4.5では、 Product -> スキームの編集: Debug Process As の下の Info タブを確認します。 root オプションを選択します。
Xcodeは、デバッグアプリケーションをルートとして実行できます。このためには、次の手順を実行する必要があります。
-
ローカルマシンのルートユーザーを有効にします。
a。 “ディレクトリユーティリティ”を実行します(/ System / Library / CoreServices / Directory Utility.app)
b。 [ルートユーザーを有効にする]を選択します。編集メニューからルートパスワードを入力します。
-
リモートロギングを有効にします。
a。システム設定で… ->共有、リモートログインを確認します。このオプションはsshデーモンをオンにします。
-
ルートユーザーの.ssh / authorized_keysフォルダーにssh公開/秘密キーを作成し、公開キーをコピーします。
a。ローカルマシンでターミナルを開き、
と入力しますssh-keygen -t rsa
b。デフォルトの場所を受け入れ、ルートのパスワードを入力します。
c。ルート
su-
としてログインし、〜/ .sshディレクトリを作成します。 (〜== / var / root)d。公開鍵をルートにコピーします:
cat〜/ .ssh / id_rsa.pub | ssh root @ localhost" cat->> 〜/ .ssh / authorized_keys"
e。すべてが正常かどうかを確認します。 「
ssh root @ localhost
」と入力します。 rootパスワードを要求するべきではありません。 -
Xcodeでsshを介したリモートデバッグを有効にします。
a。 [情報を取得]を選択します。 « Executables»のドロップダウンメニューから。
b。 "デバッグ"設定チェック« SSH経由でリモートで実行可能ファイルをデバッグ»そして、root#localhostを« Connect to»として設定しますinfo。
-
今はすべてOKです☺
XCodeは、これらの回答のほとんどを廃止したリモートデバッグをサポートしなくなりました。
ルートとしてプログラムをデバッグする場合、簡単になりました。 [製品]メニューで、[スキームの編集]#8230;"を使用します。および「実行」でスキーム" Info"ペインで[プロセスをルートとしてデバッグ]を選択します。一度認証する必要があります。
Xcode 4.5の時点で、かなりXcodeを実行して再起動するまで、奇妙なエラーが発生しました。
SSH経由でルートとしてデバッグします。
アクティブな実行可能ファイルの編集->デバッグ-> SSHを介してリモートで実行可能ファイルをデバッグします。
ポート443で実行されているWebサーバーをデバッグする場合は、代わりに通常のアカウントのポート8443で実行し、以下を実行できます。 sudo ssh user @ localhost -L 443:localhost:8443 -N
その場合でも、適切なポートでアプリケーションに連絡できますが、通常のユーザーとしてアプリケーションを実行できるという利点があります。