web-dev-qa-db-ja.com

UbuntuのEclipseでrootとしてアプリケーションをデバッグする方法

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

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

更新(および警告!):

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

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

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

62
xmoex

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

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

3
David Alfonso

Localhostでgdbserverを使用して既存のプロセスをアタッチできます。以下はコマンドラインです。

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

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

Sudo gdbserver :<listening port> <process executable>

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

3
sean

別の解決策は、あなた(またはgdb実行可能ファイル)に ここで言及 としてpcapキャプチャを作成する権利を与えることです。このようなもので:

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

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

1
Cédric Julien

この質問はずっと前に尋ねられましたが、これが誰かに役立つ場合は、bugzillaでバグを開いて、この短いスレッドが問題を解決しました: bugzilla bug

0
yehudahs

これが私がやった方法です:

C/C++リモートアプリケーションを作成する

  1. ターゲットで、SudoがPWを要求しないことを確認します
  2. Debug ConfigurationsDebuggerPort numberを見てください
  3. 編集デバッグ構成メインアプリケーションの前に実行するコマンド

への変更:

Sudo gdbserver :<port number> <path to application>;exit #

これは基本的にgdbserverを実行しますが、これは通常、Sudo内のEclipseによって実行され、末尾の ' 'は、Eclipseコマンドが実行されないようにします。

0
MattR