Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调试C++;NetBeans 8.0中需要运行sudo的程序_C++_Debugging_Netbeans_Gdb_Sudo - Fatal编程技术网

C++ 调试C++;NetBeans 8.0中需要运行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中运行程序时,程序

我知道这个问题在不同的网站上被问了很多次,但我找不到任何解决问题的建议。我正在使用NetBeans 8.0中的GCC 4.8.1,需要(可视化地)调试一个程序,该程序可以访问原始设备,因此我需要通过sudo运行它

我的项目属性设置为:

  • 运行->运行命令=“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
    。聚氨基甲酸酯