使用qt创建者以root权限在ubuntu上调试Qt应用程序


10

可以使用来以root特权运行我的应用程序sudo,如下所示:

sudo ./MyApp

是否可以使用QtCreator使用根特权来调试我的Qt应用程序?如何在Ubuntu系统上执行此操作?

Answers:


14
  1. Tools-> Options-> Environment
  2. 选项卡General**System** Group有一个Terminal选项
  3. 默认值设置为/usr/bin/xterm -e。将其替换为/usr/bin/xterm -e sudo/usr/bin/gnome-terminal -x sudo
  4. 按下ApplyOK 按钮
  5. 在“ 模式选择器下,单击Projects,选择“ Run选项”。在“ Run组框”下,选择Run in Terminal

请记住:sudo选项必须存在

/etc/sudoers使用编辑sudo visudo

下次运行该程序时,将以新权限xtermgnome-terminal 具有“超级用户权限”的方式调用该程序,并要求输入root密码


2
这是正确的解决方案
Ray

2
我们应该在/ etc / sudoers中添加什么?
Necktwi

4
对我不起作用,输入sudo密码后,应用程序输出报告“调试已完成”,没有一个中断点真正中断

根据记录,“模式选择器”是最左侧的按钮面板,“欢迎”位于最顶部
Eric

1

我通过以root身份启动Qt Creator来解决它。

sudo /usr/bin/qtcreator

现在,当我进行编译和调试时,它将获得应用程序的root权限。现在可以用root权限调试我的应用程序了。


3
这是非常非常愚蠢的事情。我不是要冒犯他人。从某种意义上说这不是一件明智的事情,这是愚蠢的。而且我相信大多数人永远不会这样做。
iharob


1
不要成为Windows用户。不要以root用户身份运行所有内容。
Shahbaz

1
不要这样!这可以更改在这种情况下保存的源文件的所有权,以及.pro.user和其他Qt Creator配置文件的所有权。当您切换回以普通用户身份运行时,您将遇到错误,并且必须跳过一些箍以恢复所有内容。我很难学到这一点……
BuvinJ

1

以root身份运行它是一个可怕的想法。而是使用源,并使qtcreator使用sudo来启动gdb,如下所示。要求您在启动qtcreator之前从tty和auth sudo运行qtcreator,或者为用户配置无密码的sudo(不建议)。稍后我将编写一个更完整的解决方案。

在没有QT知识的情况下,我花了1-2个小时进行代码/调试。大部分时间都花在等待编译完成上

https://gist.github.com/ppetraki/a0080da047047ea184c6

--- qtcreator-3.0.1.orig/src/plugins/debugger/gdb/gdbprocess.cpp +++ qtcreator-3.0.1/src/plugins/debugger/gdb/gdbprocess.cpp @@ -59,7 +59,11 @@ QByteArray GdbProcess::readAllStandardEr

void GdbProcess::start(const QString &cmd, const QStringList &args) { - m_gdbProc.setCommand(cmd, Utils::QtcProcess::joinArgs(args)); + QStringList sudoArgs; + sudoArgs << cmd << args; + QString sudoCmd = QString::fromUtf8("/usr/bin/sudo"); + + m_gdbProc.setCommand(sudoCmd, Utils::QtcProcess::joinArgs(sudoArgs)); m_gdbProc.start(); }


1

我将在具有GDB服务器(作为根)的终端上运行程序,然后使用来自QtCreator的gdb连接到服务器。您将使用以下内容启动gdbserver:

$ sudo gdbserver host:2345 ./MyApp

在这里,您使用端口2345托管服务器。您还可以检查应用程序是否确实以UID 0运行。

$ sudo ps -u

现在,在Qt Creator中,进入Debug-> Start Debugging-> Attach to Running Debug Server。填写表格...最重要的是端口和服务器地址。我选择了127.0.0.1和2345。您可以选择main处的break来在程序的开始处中断。除非您连接,否则GDB服务器不会启动程序。


0

建议在Qt支持论坛上采取以下措施:

在Qt Creator中,在选项->设备中添加远程Linux设备。将其地址设置为localhost,将用户设置为root。创建一对认证密钥,并将公共密钥粘贴到/root/.ssh/authorized_keys。然后在选项->套件中克隆桌面套件,并将新套件的设备设置为您在上一步中创建的设备。

现在,当您开始调试时,Qt Creator应该通过ssh以root身份自动连接到localhost,启动gdbserver并执行调试。

它也可以在无需调试的情况下运行。

也许您应该在远程主机上设置程序的安装,但这是另一回事,并且Qmake和QBS的处理方式有所不同。

https://forum.qt.io/post/185983

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.