如何在Ubuntu中以eclipse身份调试应用程序?

时间:2010-05-23 10:28:37

标签: c eclipse debugging root libpcap

我正在使用libpcap编程应用程序。当我在正常模式下调试应用程序时,pcap无法获取网络设备。似乎我必须在root中调试应用程序。 如何在root中调试应用程序?我有root密码。 我认为eclipse有这样的选项,可以为调试应用程序添加root,但我不知道该怎么做。 请帮忙。

8 个答案:

答案 0 :(得分:62)

  1. 让您的用户以root身份运行,而不会被要求提供 密码:
    sudo visudo
    在所有其他规则之后添加以下行:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. 中创建或修改调试配置,以root身份运行gdb 例如在运行&gt;调试配置&gt; C / C ++应用程序&gt; YourProject Debug:
    更改调试器&gt;主要&gt;从gdbsudo -u <youruser> gdb
  3. 的GDB调试器

    更新(和警告!):

    在他的评论中,nategoose指出这个答案应该带有警告:

    让我的答案中建议的用户sudo使用gdb实际上为他/她提供管理员权限,这在许多情况下可能是不受欢迎的副作用。因此,我认为答案适用于不假设用户会试图损害系统的环境(例如,它是您自己的个人计算机或虚拟机)

    对于多(不可信)用户环境,我认为使用unix' file capabilities启用gdb调试应用程序而不需要管理员权限可能是更好的理想

答案 1 :(得分:3)

使用sudo启动Eclipse(仅用于完整性:http://www.eclipse.org/forums/index.php?t=msg&goto=516838&

更新:关注xmoex解决方案。如果你以root身份运行Eclipse(即使用sudo),你的文件将是root拥有的......你可能不想要它。

答案 2 :(得分:3)

您可以在localhost上使用gdbserver来附加现有进程,以下是命令行:

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

或者您可以使用gdbserver创建一个新进程:

sudo gdbserver :<listening port> <process executable>

然后,您可以在Eclipse中,在调试器选项卡,调试器项目中选择gdbserver创建调试配置,并在下面的连接选项卡中输入侦听端口。

答案 3 :(得分:1)

另一种解决方案是授予您(或gdb可执行文件)作为mentioned here进行一些pcap捕获的权限。有这样的事情:

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

您应该能够允许将数据包捕获到gdb而不是root。

答案 4 :(得分:1)

这是我的操作方式:

创建 C / C ++远程应用程序

  1. 在目标上,确保您的sudo不会提示您输入密码
  2. 查看调试配置调试器端口号
  3. 编辑调试配置主要在应用程序之前执行的命令

更改为:

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

这将基本上运行通常由eclipse在 sudo 内部执行的 gdbserver ,后缀“ ”将保持eclipse命令执行。

答案 5 :(得分:0)

很久以前就问了这个问题,但如果这对任何人都有帮助,我会在bugzilla中打开一个bug,这个短线程解决了这个问题: bugzilla bug

答案 6 :(得分:-1)

最简单的方法,尝试sudo ./eclipse,然后像往常一样调试

答案 7 :(得分:-2)

从包含可执行文件的目录中的控制台:

sudo gdb ./my_program

如果eclipse支持远程调试,那么即使它在本地运行,你也可以这样做。

从控制台:

sudo gdbserver localhost:<port_number> ./my_program

然后告诉Eclipse地址(localhost和你选择的端口号)。

哦,是的,你说你这样做的原因是因为你使用的是libpcap,所以你可能不想在TCP上使用远程调试,因为你可能最终捕获你的调试连接数据包了其他网络流量。

在这种情况下,您可以通过串行端口进行远程(但实际上是本地)调试。我从未在本地计算机上执行此操作,但您可以使用两个实际的串行端口(通过空调制解调器连接它们)或尝试使用psudoterminal:

sudo gdbserver /dev/ptmx ./my_program

这将在/dev/pts/下创建psudo-terminal,但您必须弄清楚它的名称,并且它也可能使用限制性权限创建它。你可以绕过那些。除非您以root用户身份运行许多终端窗口,否则/dev/pts下的许多条目不太可能属于root用户,因此请注意运行上述命令后执行的条目,然后{{1} }或sudo chmod它使普通用户可以使用它,然后告诉调试器将其用作远程调试目标的串行连接。