C++ 调试C++;NetBeans 8.0中需要运行sudo的程序
我知道这个问题在不同的网站上被问了很多次,但我找不到任何解决问题的建议。我正在使用NetBeans 8.0中的GCC 4.8.1,需要(可视化地)调试一个程序,该程序可以访问原始设备,因此我需要通过sudo运行它 我的项目属性设置为:C++ 调试C++;NetBeans 8.0中需要运行sudo的程序,c++,debugging,netbeans,gdb,sudo,C++,Debugging,Netbeans,Gdb,Sudo,我知道这个问题在不同的网站上被问了很多次,但我找不到任何解决问题的建议。我正在使用NetBeans 8.0中的GCC 4.8.1,需要(可视化地)调试一个程序,该程序可以访问原始设备,因此我需要通过sudo运行它 我的项目属性设置为: 运行->运行命令=“sudo${OUTPUT\u PATH}” 运行->控制台类型=“外部终端” 运行->外部终端类型=“默认” 所有其他设置都是默认设置,包括Debug->Debug Command,该设置为空 因此,当我在NetBeans中运行程序时,程序
- 运行->运行命令=“sudo${OUTPUT\u PATH}”
- 运行->控制台类型=“外部终端”
- 运行->外部终端类型=“默认”
Debug->Debug Command
,该设置为空
因此,当我在NetBeans中运行程序时,程序运行正常-sudo请求密码,然后程序继续。但是,我不能在NetBeans中调试它-调试器输出下面的文本并停止
有什么想法吗?请不要建议以root用户身份运行NetBeans,这对我来说太麻烦了
(我使用的是Xubuntu 3.11
,它在Mac上的VMWare Fusion VM中作为来宾操作系统运行)
从2015/09/16起更新:
根据多个建议(来自网络),我试图用脚本将工具
->选项
->C/C++
弹出窗口中的调试命令
替换为以下内容:
#!/bin/bash
PROG=$(which gdb)
sudo $PROG "$@"
该脚本在命令行中运行良好。但是,当我尝试从NetBeans调试我的程序时,会出现以下弹出窗口:
因此,第一个问题消失了,第二个问题出现了。在这种情况下,我看到了许多清除断点的建议——这对我没有帮助
你知道下一步该怎么做吗
(gdb版本是GNU gdb(Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04)我想到的最好的办法是使用sudo
启动gdb
,并强制系统不要求密码。我相信这里已经有了您的问题的答案(虽然对于Eclipse,但对于Netbeans基本上是一样的)
希望这有帮助。你可以试试其中一种
以超级用户身份运行Netbeans。为此,可以通过终端sudo启动Netbeans
以root用户身份登录。在此之前,您需要为登录()启用根帐户。从技术上讲,您在那里执行的任何操作都不会要求身份验证,因为您已经是su李>
希望这能解决你的问题
祝你好运你试过用“sudogdb”作为调试命令吗
(或者将Netbeans作为根目录运行,这是最后的手段)?有点晚了,但我在寻找完全相同问题的解决方案时遇到了这个问题
使用以下内容创建脚本文件:
#!/bin/bash
sudo /usr/bin/gdb $*
为用户将脚本文件的权限更改为可执行
在NetBeans中,转到工具->选项->C/C++->调试器命令->脚本文件名我就是这样使用它的:
运行->运行命令=sudo“${OUTPUT\u PATH}”
您需要在引号之前移动sudo
其他设置不应引起任何问题,但我的设置如下:
运行->控制台类型=“标准输出”
运行->外部终端类型=“默认”
从NetBeans或命令行运行程序
然后在NetBeans中转到Debug->Attach Debugger,指定相关项目,并附加到进程
万一有人还在寻找解决办法
它并没有以作者期望的方式解决问题,但它确实以可行的解决方案解决了问题
允许sshd可作为根用户使用
- vim/etc/ssh/sshd\u config
- 允许登录是的
- systemctl重新启动sshd
使用root用户名在Netbeans中添加主机
选择新添加的主体作为默认主体,并在项目属性中更改主体
清理和构建,它现在应该调试没有任何问题
我在sudoers
中已经有了这个设置,它允许我在没有密码的情况下运行gdb
。很抱歉,如果我在NetBeans中运行调试器,那么它没有帮助。我怀疑NetBeans和gdb
之间还有其他东西需要配置。“Debug命令”中的sudo-U gdb
也没有帮助。以下任何一项是否适用于您的情况?1) 首先,sudo二进制文件所在的文件系统使用“nosuid”挂载选项挂载,该选项禁用setuid二进制文件。2) 另一个是sudo安装在一个NFS挂载的文件系统上,该文件系统在没有root权限的情况下导出。默认情况下,NFS文件系统导出时uid 0映射到非特权uid(通常为-2)。您可以从命令行调试程序吗?即运行gdb executable
,然后尝试进入它(按s
然后继续按Enter
)sudo
二进制文件位于Xubuntu VM内的/dev/sda1
上,而我调试的二进制文件位于主机磁盘上,它作为vmhgfs
文件系统装载到VM中。装载标志是(rw,ttl=1)
。是的,我可以使用sudogdb
从命令行调试我的程序。我不能确定到底发生了什么,但我猜这与主机fs的安装方式有关。。。是否有可能复制VM客户机上的源代码并查看是否仍然存在错误?我以前在netbeans(而不是VM)中使用sudo进行过调试,它很有效。您是否尝试过sudo-E
?这可能非常有效(在以root身份运行Netbeans时也可以尝试)。它在模拟之前使用用户的环境root@sehe-是的,我有-这并不能完全帮助您寻找什么,但我能够将Netbeans与gdbserver一起使用(首先您必须安装gdbserver Plugin)。在远程计算机中启动sudo gdbserver主机:端口。/prog args
。聚氨基甲酸酯