38

libpcap を使用してアプリケーションをプログラミングしています。通常モードでアプリケーションをデバッグすると、pcap がネットワーク デバイスを取得できません。ルートでアプリケーションをデバッグする必要があるようです。root でアプリケーションをデバッグするにはどうすればよいですか? 私はルートパスワードを持っています。Eclipse には、デバッグ アプリケーションのルートを追加できるオプションがあると思いますが、その方法がわかりません。助けてください。

4

8 に答える 8

68
  1. パスワードを求められることなく、ユーザーが root としてを実行できるようにします。
    sudo visudo
    他のすべてのルールの後に次の行を追加します。
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. でデバッグ構成を作成または変更してgdb を root として
    実行します。たとえば、[実行] > [デバッグ構成] > [C/C++ アプリケーション] > [YourProject デバッグ] で:
    [デバッガー] > [メイン] > [GDB デバッガー] を [から] に変更gdbします。sudo -u <youruser> gdb

更新 (および警告!):

彼のコメントで nategoose は、この回答には警告が必要であると指摘しました。

実際、私の回答で提案されているようsudoにユーザーが使用できるようにすると、多くの場合、望ましくない副作用になる可能性がある管理者権限がユーザーに与えられます。したがって、ユーザーがシステムに危害を加えようとすることが想定されていない環境 (たとえば、自分のパーソナル コンピューターまたは仮想マシン) での回答は適切であると考えています。gdb

マルチ(信頼されていない)ユーザー環境の場合、 UNIXのファイル機能を利用gdbして、管理者権限を必要とせずにアプリケーションをデバッグできるようにする方が良いと思います

于 2011-11-15T21:16:15.663 に答える
3

sudo で Eclipse を起動します (完全を期すために: http://www.eclipse.org/forums/index.php?t=msg&goto=516838& ) 。

更新: xmoex ソリューションに従ってください。Eclipse を root として (つまり、sudo を使用して) 実行すると、ファイルは root 所有になります...これはおそらく望ましくありません。

于 2010-09-21T07:25:52.173 に答える
3

localhost で gdbserver を使用して、既存のプロセスをアタッチできます。コマンド ラインは次のとおりです。

sudo gdbserver :<listening port> --attach <pid>

または、gdbserver を使用して新しいプロセスを作成できます。

sudo gdbserver :<listening port> <process executable>

次に、Eclipse でデバッグ構成を作成し、デバッガー タブのデバッガー アイテムで gdbserver を選択し、次の接続タブでリッスン ポートを入力します。

于 2014-04-20T07:21:40.243 に答える
1

別の解決策は、あなた (または gdb 実行可能ファイル) に、ここで説明されているように、いくつかの pcap キャプチャを作成する権利を付与することです。このようなもので:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb

root にならずにパケットを gdb にキャプチャできるようにする必要があります。

于 2011-11-15T21:33:19.223 に答える
-2

実行可能ファイルがあるディレクトリのコンソールから:

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 chmodsudo chown、通常どおり使用できるようにします。 user を指定し、それをリモート デバッグ ターゲットへのシリアル接続として使用するようにデバッガに指示します。

于 2010-05-23T22:24:25.880 に答える