как отладить приложение как root в eclipse в Ubuntu? - PullRequest
33 голосов
/ 23 мая 2010

Я программирую приложение, используя libpcap. Когда я отлаживаю приложение в обычном режиме, pcap не может получить сетевое устройство. кажется, что я должен отладить приложение в корне. Как я могу отладить приложение в корне? У меня есть пароль root. Я думаю, что у eclipse есть такая опция, которая может добавить root для приложения отладки, но я не знаю, как это сделать. пожалуйста помоги.

Ответы [ 7 ]

62 голосов
/ 16 ноября 2011
  1. Позвольте вашему пользователю запускать от имени пользователя root без запроса пароля:
    sudo visudo
    Добавьте следующую строку после всех других правил:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. Создание или изменение конфигурации отладки в для запуска gdb от имени пользователя root
    , например, в разделе «Выполнить»> «Конфигурации отладки»> Приложение C / C ++> Отладка YourProject:
    change Debugger>Главная> Отладчик GDB с gdb до sudo -u <youruser> gdb

Обновление (и предупреждение!):

В своем комментарии nategoose указал, что этот ответ долженприходят с предупреждением:

Разрешение пользователю использовать sudo для gdb, как предложено в моем ответе фактически дает ему / ей привилегии администратора , которые во многих случаях могут бытьнежелательный побочный эффект.Поэтому я считаю, что ответ уместен в среде, где не предполагается, что пользователь будет пытаться нанести вред системе (например, это ваш личный компьютер или виртуальная машина)

Для нескольких (не доверенных) -пользовательская среда Я думаю, что было бы лучше использовать файловые возможности unix , чтобы gdb мог отлаживать приложение без прав администратора

3 голосов
/ 20 апреля 2014

Вы можете использовать gdbserver на локальном хосте для присоединения существующего процесса, следующая командная строка:

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

Или вы можете создать новый процесс, используя gdbserver:

sudo gdbserver :<listening port> <process executable>

Затем вы можете создать конфигурацию отладки в Eclipse, на вкладке отладчик, элемент отладчика, выбрать gdbserver и ввести порт прослушивания на вкладке подключения ниже.

3 голосов
/ 21 сентября 2010

Запустите Eclipse с помощью sudo (только для полноты: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)

Обновление: следуйте решению xmoex. Если вы запустите Eclipse от имени пользователя root (т. Е. С помощью sudo), ваши файлы будут принадлежать пользователю root, что, вероятно, вам не нужно.

1 голос
/ 16 ноября 2011

Другое решение - предоставить вам (или исполняемому файлу gdb) права на создание некоторых захватов pcap как , упомянутое здесь .Что-то вроде этого:

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

вы должны иметь возможность разрешать захват пакетов в gdb, не будучи root.

0 голосов
/ 24 апреля 2017

самый простой способ, попробуйте sudo ./eclipse, затем отладьте как обычно

0 голосов
/ 19 марта 2014

этот вопрос задавался давно, но если это кому-нибудь поможет, я открою ошибку в bugzilla, и эта короткая ветка решит проблему: ошибка bugzilla

0 голосов
/ 24 мая 2010

Из консоли в каталоге с вашим исполняемым файлом:

sudo gdb ./my_program

Если eclipse поддерживает удаленную отладку, вы можете сделать это, даже если он работает локально.

С консоли:

sudo gdbserver localhost:<port_number> ./my_program

А затем сообщите Eclipse адрес (localhost и номер порта, который вы выбрали).

О, да, вы сказали, что причина, по которой вы это делали, была в том, что вы использовали libpcap, поэтому вы можете не захотеть использовать удаленную отладку по TCP, потому что вы можете в конечном итоге захватывать пакеты отладочного соединения в дополнение к вашей другой сети трафика.

В этом случае вы выполняете удаленную (но действительно локальную) отладку через последовательный порт. Я никогда не делал этого на локальной машине, но вы могли бы использовать два реальных последовательных порта (подключив их через нуль-модем) или попробовать использовать псевдотерминал:

sudo gdbserver /dev/ptmx ./my_program

Это создаст псевдо-терминал под /dev/pts/, но вам придется выяснить его имя, и он также может создать его с ограниченными правами. Вы можете обойти это. Если вы не запускаете много окон терминала в качестве пользователя root, маловероятно, что у вас будет много записей в разделе /dev/pts, принадлежащих пользователю root, поэтому обратите внимание на ту, которая появляется после выполнения вышеуказанной команды, а затем sudo chmod или * 1020. * чтобы его можно было использовать для обычного пользователя, а затем попросить отладчик использовать его в качестве последовательного соединения с целью удаленной отладки.

...