Я программирую приложение, используя libpcap. когда я отлаживаю приложение в обычном режиме, pcap не может получить сетевое устройство. кажется, что я должен отлаживать приложение в корне. Как я могу отлаживать приложение в корне? У меня есть пароль root. Я думаю, что eclipse имеет такой вариант, который может добавить root для приложения для отладки, но я не знаю, как это сделать. пожалуйста помоги.
Как отлаживать приложение как root в eclipse в Ubuntu?
Ответ 1
- Позволяет пользователю запускать gdb как root без запроса каких-либо
Пароль:
sudo visudo
Добавьте следующую строку после всех других правил:<youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
- Создайте или измените конфигурацию отладки в eclipse запустить gdb как root
например в Run > Конфигурации отладки > Приложение C/С++ > Отладка вашего проекта:
изменить Отладчик > Главная > Отладчик GDB отgdb
доsudo -u <youruser> gdb
Обновление (и предупреждение!):
В своем комментарии nategoose указал, что этот ответ должен прийти с предупреждением:
Включение пользователя для использования sudo
для gdb
, как указано в моем ответе, фактически дает ему привилегии администратора, которые во многих случаях могут быть нежелательным побочным эффектом. Поэтому я считаю ответ подходящим в среде, где не предполагается, что пользователь попытается повредить систему (например, это ваш собственный персональный компьютер или виртуальная машина).
Для многопользовательской (ненадежной) среды-пользователя я думаю, что лучше было бы использовать unix файлы, чтобы включить gdb
для отладки приложения без необходимости использования привилегий администратора
Ответ 2
Запустите Eclipse с помощью sudo (только для полноты: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)
Обновление: Следуйте решению xmoex. Если вы запустите Eclipse как root (т.е. С помощью sudo), ваши файлы будут принадлежать root..., которые вы, вероятно, не хотите.
Ответ 3
Вы можете использовать gdbserver на localhost для присоединения к существующему процессу, следующая строка:
sudo gdbserver :<listening port> --attach <pid>
Или вы можете создать новый процесс с помощью gdbserver:
sudo gdbserver :<listening port> <process executable>
Затем вы можете создать конфигурацию отладки в Eclipse, на вкладке отладчика, элемент отладчика, выбрать gdbserver и ввести порт прослушивания на вкладке соединения ниже.
Ответ 4
Другим решением является предоставление вам (или исполняемому gdb) прав на внесение некоторых захватов pcap в качестве упомянутых здесь. Что-то вроде этого:
setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb
вы должны иметь возможность разрешить захват пакетов в gdb без root.
Ответ 5
этот вопрос задавался давно, но если это кому-то поможет, я открою ошибку в bugzilla, и этот короткий поток решил проблему: ошибка bugzilla
Ответ 6
С консоли в каталоге с вашим исполняемым файлом:
sudo gdb ./my_program
Если eclipse поддерживает удаленную отладку, вы можете сделать это, даже если оно выполняется локально.
На консоли:
sudo gdbserver localhost:<port_number> ./my_program
И затем скажите Eclipse адрес (localhost и номер порта, который вы выбрали).
О, да, вы сказали, что причина, по которой вы делаете это, заключалась в том, что вы использовали libpcap
, поэтому вы не можете использовать удаленную отладку через TCP, потому что вы можете завершить захват ваших пакетов отладки в дополнение к другой сети трафик.
В этом случае вы выполняете удаленную (но действительно локальную) отладку через последовательный порт. Я никогда не делал этого на локальной машине, но вы могли бы использовать два фактических последовательных порта (прикрепляя их, используя нуль-модем), или попробуйте использовать psudoterminal:
sudo gdbserver /dev/ptmx ./my_program
Это создаст psudo-терминал под /dev/pts/
, но вам нужно будет определить его имя, а также создать его с ограничительными разрешениями. Вы можете обойти их. Если вы не используете много окон терминалов с правами root, маловероятно, что у вас есть много записей в /dev/pts
, принадлежащих root, поэтому обратите внимание на то, что делает после выполнения указанной выше команды, а затем sudo chmod
или sudo chown
чтобы сделать его пригодным для использования вашим обычным пользователем, а затем попросите отладчика использовать его в качестве вашего последовательного подключения к вашей удаленной цели отладки.
Ответ 7
проще всего попробовать sudo./eclipse, а затем отлаживать как обычно