可以使用来以root特权运行我的应用程序sudo
,如下所示:
sudo ./MyApp
是否可以使用QtCreator使用根特权来调试我的Qt应用程序?如何在Ubuntu系统上执行此操作?
可以使用来以root特权运行我的应用程序sudo
,如下所示:
sudo ./MyApp
是否可以使用QtCreator使用根特权来调试我的Qt应用程序?如何在Ubuntu系统上执行此操作?
Answers:
Tools-> Options-> Environment
General
下**System** Group
有一个Terminal
选项。/usr/bin/xterm -e
。将其替换为/usr/bin/xterm -e sudo
或/usr/bin/gnome-terminal -x sudo
。Apply
和OK
按钮。Projects
,选择“ Run
选项”。在“ Run
组框”下,选择Run in Terminal
。请记住:sudo
选项必须存在
/etc/sudoers
使用编辑sudo visudo
下次运行该程序时,将以新权限xterm
或gnome-terminal
具有“超级用户权限”的方式调用该程序,并要求输入root密码。
我通过以root身份启动Qt Creator来解决它。
sudo /usr/bin/qtcreator
现在,当我进行编译和调试时,它将获得应用程序的root权限。现在可以用root权限调试我的应用程序了。
以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();
}
我将在具有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服务器不会启动程序。
建议在Qt支持论坛上采取以下措施:
在Qt Creator中,在选项->设备中添加远程Linux设备。将其地址设置为localhost,将用户设置为root。创建一对认证密钥,并将公共密钥粘贴到/root/.ssh/authorized_keys
。然后在选项->套件中克隆桌面套件,并将新套件的设备设置为您在上一步中创建的设备。
现在,当您开始调试时,Qt Creator应该通过ssh以root身份自动连接到localhost,启动gdbserver并执行调试。
它也可以在无需调试的情况下运行。
也许您应该在远程主机上设置程序的安装,但这是另一回事,并且Qmake和QBS的处理方式有所不同。