QXcbConnection:使用 Qt5 远程调试程序时无法连接到显示器
Posted
技术标签:
【中文标题】QXcbConnection:使用 Qt5 远程调试程序时无法连接到显示器【英文标题】:QXcbConnection: Could not connect to display, when remotely debugging program with Qt5 【发布时间】:2018-06-11 15:25:28 【问题描述】: PC:Debian 9.4.0,x64,ip 192.168.1.10 Qt:Qt Creator 4.6.1 基于Qt5.11.0 BeagleBone Black:Debian 9.3.0,armv7,ip 192.168.1.20我在我的 PC 上为 BeagleBone Black 交叉编译了一个 GUI 应用程序,我可以在我的 BeagleBone 上成功执行它。 但是当我使用 F5(菜单:Debug->Start Debugging)远程调试应用程序时,我遇到了如下问题。
QXcbConnection: 无法连接到显示器
应用程序在 main() 中崩溃:
QApplication a(argc, argv);
-
以下是编译调试时的细节:
debug details:
Checking available ports...
Found 101 free ports.
Starting gdbserver...
Debugging starts
Listening on port 10001
Remote debugging from host 192.168.1.10
Process /home/debian/gdb/armtest3 created; pid = 13981
Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Could not load shared library symbols for 25 libraries, e.g. /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so.5.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
-----------------armtest3 start------------
QXcbConnection: Could not connect to display
compile output:
09:31:33: Running steps for project armtest3...
09:31:33: Configuration unchanged, skipping qmake step.
09:31:33: Starting: "/usr/bin/make"
make: Nothing to be done for 'first'.
09:31:33: The process "/usr/bin/make" exited normally.
09:31:33: The remote file system has 218 megabytes of free space, going ahead.
09:31:33: Deploy step finished.
09:31:33: Trying to kill "/home/debian/gdb/armtest3" on remote device...
09:31:37: Remote application killed.
09:31:37: Deploy step finished.
09:31:37: No deployment action necessary. Skipping.
09:31:37: Deploy step finished.
09:31:37: Elapsed time: 00:04.
以下是我的 BeagleBone Kit:BeagleBone Kit configuration
main.c
main.c
#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <QDateTime>
#include <QDebug>
using namespace std;
int main(int argc, char *argv[])
cout << "-----------------armtest3 start------------" << endl;
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
相关问题:QXcbConnection: Could not connect to display, when trying to debug Linux app with Qt Creator
【问题讨论】:
【参考方案1】:当您部署应用程序并在设备本身的 X11 系统中运行它时,您会发现它可以工作,因为在这里它可以访问DISPLAY
环境变量,该变量(简而言之)告诉它在哪里显示自己。此环境变量已在您的 X 会话中进一步设置在进程树上。
当您通过调试器启动程序时,Qt Creator 正在连接到远程设备(通过您在工具>选项>设备中的设置),并通过 ssh 运行程序。在这种情况下,您的程序不再知道在哪里显示自己,因为显然它无法在 ssh 中显示。它在您指示的线路上出现故障,因为这是 XCB 子系统尝试确定为此目的连接到哪个 X-Server 的位置。
那么回答你的问题:你需要在远程调试时手动提供DISPLAY
环境变量。
一个简单的测试方法是进入项目模式,找到你用来为远程设备构建的工具包,然后选择运行设置。在此之下,您应该找到一个 Run Environment 部分。在这里,您可以添加一个名为DISPLAY
的新变量并将其值设置为您正在运行的显示器的标识符(我猜您会想要:0.0
,表示本地主机上的第一个可用屏幕,尽管您应该阅读关于 DISPLAY 变量,例如 here 或 here)。
一个长期的、可能更好的解决方案是在您的工具包设置中设置相同的变量(工具 > 选项 > 构建和运行 > 工具包 > 环境)。然后,这将应用于您使用它创建的未来程序。
【讨论】:
太棒了!非常感谢你。当我在 Projects Mode > Run settings > Run Environment 部分中添加显示环境时,它可以工作。但是当我在我的工具包中设置显示环境(工具>选项>构建和运行>工具包>环境)时,它表明同样的错误。以上是关于QXcbConnection:使用 Qt5 远程调试程序时无法连接到显示器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 上使用 Qt5 访问远程 MySQL 服务器?
CloudCompare 无法启动并出现错误:“QXcbConnection:无法连接到显示器:0”
Qt报错:qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch).....
QXcbConnection: XCB error: 145 (Unknown), sequence: 171, resource id: 0 报错问题
vnc 登录 Ubuntu gnome 桌面出现 QXcbConnection : Failed to initialize XRandr 错误,然后打不开