libpcap を使用してアプリケーションをプログラミングしています。通常モードでアプリケーションをデバッグすると、pcap がネットワーク デバイスを取得できません。ルートでアプリケーションをデバッグする必要があるようです。root でアプリケーションをデバッグするにはどうすればよいですか? 私はルートパスワードを持っています。Eclipse には、デバッグ アプリケーションのルートを追加できるオプションがあると思いますが、その方法がわかりません。助けてください。
8 に答える
- パスワードを求められることなく、ユーザーが root としてgdbを実行できるようにします。
sudo visudo
他のすべてのルールの後に次の行を追加します。
<youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
- eclipseでデバッグ構成を作成または変更してgdb を root として
実行します。たとえば、[実行] > [デバッグ構成] > [C/C++ アプリケーション] > [YourProject デバッグ] で:
[デバッガー] > [メイン] > [GDB デバッガー] を [から] に変更gdb
します。sudo -u <youruser> gdb
更新 (および警告!):
彼のコメントで nategoose は、この回答には警告が必要であると指摘しました。
実際、私の回答で提案されているようsudo
にユーザーが使用できるようにすると、多くの場合、望ましくない副作用になる可能性がある管理者権限がユーザーに与えられます。したがって、ユーザーがシステムに危害を加えようとすることが想定されていない環境 (たとえば、自分のパーソナル コンピューターまたは仮想マシン) での回答は適切であると考えています。gdb
マルチ(信頼されていない)ユーザー環境の場合、 UNIXのファイル機能を利用gdb
して、管理者権限を必要とせずにアプリケーションをデバッグできるようにする方が良いと思います
sudo で Eclipse を起動します (完全を期すために: http://www.eclipse.org/forums/index.php?t=msg&goto=516838& ) 。
更新: xmoex ソリューションに従ってください。Eclipse を root として (つまり、sudo を使用して) 実行すると、ファイルは root 所有になります...これはおそらく望ましくありません。
localhost で gdbserver を使用して、既存のプロセスをアタッチできます。コマンド ラインは次のとおりです。
sudo gdbserver :<listening port> --attach <pid>
または、gdbserver を使用して新しいプロセスを作成できます。
sudo gdbserver :<listening port> <process executable>
次に、Eclipse でデバッグ構成を作成し、デバッガー タブのデバッガー アイテムで gdbserver を選択し、次の接続タブでリッスン ポートを入力します。
別の解決策は、あなた (または gdb 実行可能ファイル) に、ここで説明されているように、いくつかの pcap キャプチャを作成する権利を付与することです。このようなもので:
setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb
root にならずにパケットを gdb にキャプチャできるようにする必要があります。
実行可能ファイルがあるディレクトリのコンソールから:
sudo gdb ./my_program
Eclipse がリモート デバッグをサポートしている場合は、ローカルで実行されていても実行できます。
コンソールから:
sudo gdbserver localhost:<port_number> ./my_program
次に、Eclipse にアドレス (localhost と選択したポート番号) を伝えます。
そうそう、これを行った理由は を使用していたからだとlibpcap
おっしゃいました。そのため、他のネットワーク トラフィックに加えてデバッグ接続パケットをキャプチャすることになる可能性があるため、TCP を介したリモート デバッグを使用したくない場合があります。
その場合、シリアルポートを介してリモート (ただし実際にはローカル) デバッグを行います。ローカル マシンでこれを実行したことはありませんが、2 つの実際のシリアル ポートを使用するか (ヌル モデムを介して接続)、疑似端末を使用してみてください。
sudo gdbserver /dev/ptmx ./my_program
これにより、疑似端末が作成され/dev/pts/
ますが、その名前を把握する必要があり、制限付きの権限で作成される場合もあります。それらを回避できます。多くのターミナル ウィンドウを root として実行していない限り、root に/dev/pts
属する多くのエントリが存在する可能性は低いため、上記のコマンドを実行した後に表示されるエントリを書き留めるsudo chmod
かsudo chown
、通常どおり使用できるようにします。 user を指定し、それをリモート デバッグ ターゲットへのシリアル接続として使用するようにデバッガに指示します。