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

fut*_*ang 33 c eclipse debugging root libpcap

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

xmo*_*oex 62

  1. 使您的用户能够以root 用户身份运行而不需要任何密码:
    sudo visudo
    在所有其他规则之后添加以下行:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. 创建或修改调试配置以root身份运行gdb,
    例如在运行>调试配置> C/C++应用程序> YourProject Debug:
    更改Debugger> Main> GDB调试器gdbsudo -u <youruser> gdb

更新(和警告!):

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

使用户使用sudogdb像我的回答表明实际上给管理权限给他/她在许多情况下可能是不希望的副作用.因此,我认为答案适用于不假设用户会试图损害系统的环境(例如,它是您自己的个人计算机或虚拟机)

对于多(非信任)用户环境,我认为这可能是一个更好的idead利用UNIX"文件的能力,使gdb而不需要管理员权限来调试应用程序

  • 我将调试器从gdb更改为sudo gdb并且它可以工作. (4认同)
  • 非常好的回答,请注意其他人我遇到的一个小问题:我将LD_LIBRARY_PATH设置为我的用户但root没有它,所以我将它添加到我的sudo命令但是sudo不允许你设置LD_LIBRARY_PATH所以我添加了这在visudo'Defaults env_keep + ="LD_LIBRARY_PATH"' (2认同)

nat*_*ose -2

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

sudo gdb ./my_program
Run Code Online (Sandbox Code Playgroud)

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

从控制台:

sudo gdbserver localhost:<port_number> ./my_program
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo gdbserver /dev/ptmx ./my_program
Run Code Online (Sandbox Code Playgroud)

这将在下面创建伪终端,/dev/pts/但您必须弄清楚它的名称,并且它也可能会使用限制性权限创建它。你可以绕过这些。除非您以 root 身份运行大量终端窗口,否则您不太可能有许多/dev/pts属于 root 的条目,因此请记下运行上述命令后执行的操作,然后sudo chmodsudo chown其用于正常情况用户,然后告诉您的调试器使用它作为与远程调试目标的串行连接。