当我尝试从Eclipse运行我的服务器应用程序时,我遇到了错误.错误是java.net.BindException:权限被拒绝.我想这是因为我使用端口443来建立SSL连接.如果我使用java和sudo在命令行上运行我的代码,我可以解决这个问题.有没有办法设置Eclipse,以便当我点击运行按钮时,我的应用程序是用sudo执行的?
我知道这个问题在各个网站上被多次询问,但我找不到任何建议如何解决我的问题.我在NetBeans 8.0中使用GCC 4.8.1并且需要(可视)调试访问原始设备的程序,因此我需要通过sudo运行它.
我的项目属性设置是:
- 运行 - >运行命令="sudo $ {OUTPUT_PATH}"
- 运行 - >控制台类型="外部终端"
- 运行 - >外部终端类型="默认"
所有其他设置都是默认设置,包括Debug -> Debug Command空的.
因此,当我在NetBeans中运行它时程序运行正常- sudo要求输入密码然后程序继续.但是,我无法 在NetBeans中调试它 - 调试器输出下面的文本并停止.

有任何想法吗?请不要建议以root身份运行NetBeans - 这对我来说太麻烦了.
(我在Xubuntu 3.11,它guest OS在Mac上的VMWare Fusion VM中运行)
2015/09/16更新:
据多方意见(从网上)我试图取代Debug Command的Tools- > Options- > C/C++我的,内容如下脚本弹出窗口:
#!/bin/bash
PROG=$(which gdb)
sudo $PROG "$@"
Run Code Online (Sandbox Code Playgroud)
此脚本在命令行中运行良好.但是,当我尝试从NetBeans调试我的程序时,我得到以下弹出窗口:
所以,第一个问题就消失了,第二个问题就出现了.在这种情况下,我看到了一些清除断点的建议 - 它对我没有帮助.
任何想法接下来要尝试什么?
(gdb版本是GNU gdb(Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04)
我需要使用 Eclipse (gdb) 在 Linux 上调试程序。该程序以 root 身份运行并且相当大。带有调试符号的二进制文件大约有250MB大,启动后有超过60个正在运行的线程。
我正在考虑最好的解决方案:
我认为第 1 号(gdbserver)将是最好的解决方案,不幸的是它工作不可靠。gdb 和 gdbserver 之间的连接丢失。我认为eclipse <-> gdb <-> gdbserver之间传输的大量数据存在问题。
数字 2(以 root 身份运行 eclipse)意味着以 root 身份运行每个进程,因此也会干扰版本控制系统,因为 Eclipse 插件将使用 root 用户而不是我的用户来更改版本控制文件。
我没有尝试第三个(suid gdb)。你怎么看待这件事?它到底有用吗?我知道 suid root gdb 和没有 root 密码一样安全,但该机器仅供我用于开发和调试。当然,可能有一个“启用/禁用”脚本,仅在必要时设置 suid 位。
你有什么其他的建议?
我必须写一个ping函数才能在Linux上运行.语言是C++,所以C也可以.
在Internet上搜索并查看ping命令的源代码,结果证明我应该创建一个原始套接字:
icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
Run Code Online (Sandbox Code Playgroud)
如果我在没有超级用户的情况下运行我的应用程序,则该socket函数返回,-1即套接字未成功创建.如果我以超级用户身份运行它,一切正常.
现在,该ping命令会创建一个原始套接字,我可以在没有超级用户权限的情况下运行它.
我的问题是:如何在没有超级用户执行的情况下授予我的应用程序创建原始套接字所需的所有权限?