gpt4 book ai didi

linux - 使用Qt5远程调试程序时QXcbConnection : Could not connect to display,

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:13 33 4
gpt4 key购买 nike

  • PC:Debian 9.4.0,x64,ip 192.168.1.10
  • Qt:基于Qt5.11.0的Qt Creator 4.6.1
  • BeagleBone Black:Debian 9.3.0,armv7,ip 192.168.1.20

我在我的 PC 上为 BeagleBone Black 交叉编译了一个 GUI 应用程序,我可以在我的 BeagleBone 上成功执行它。
但是当我使用 F5(菜单:调试-> 开始调试)远程调试应用程序时,我遇到了如下问题。

QXcbConnection: Could not connect to display

应用程序在 main() 中崩溃:

QApplication a(argc, argv);
  1. 以下是编译调试时的细节:

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.
  1. 以下是我的BeagleBone Kit:
    BeagleBone Kit configuration

  2. 主.c

主.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

最佳答案

当您部署应用程序并在设备本身的 X11 系统中运行它时,您会发现它可以正常工作,因为在这里它可以访问 DISPLAY 环境变量(简单地说)告诉它在哪里展示自己。此环境变量已在您的 X session 中进一步设置在进程树上。

当您通过调试器启动程序时,Qt Creator 会连接到远程设备(通过您在工具 > 选项 > 设备 中的设置),并通过 ssh 运行该程序。在这种情况下,您的程序不再知道在哪里显示自己,因为显然它不能在 ssh 中显示。它在您指定的线路上出错,因为这是 XCB 子系统试图确定为此目的连接到哪个 X-Server 的地方。

所以回答你的问题:你需要在远程调试时手动提供DISPLAY环境变量。

一个简单的测试方法是进入项目模式,找到您用于为远程设备构建的工具包,然后选择运行 设置。在此之下,您应该找到一个运行环境部分。在这里您可以添加一个名为 DISPLAY 的新变量并将其值设置为您正在运行的显示器的标识符(我猜您会想要 :0.0,表示本地主机上的第一个可用屏幕,尽管您应该阅读有关 DISPLAY 变量的信息,例如 herehere)。

一个长期的、可能更好的解决方案是在您的套件设置中设置相同的变量(工具 > 选项 > 构建和运行 > 套件 > 环境)。这将适用于您使用它创建的 future 程序。

关于linux - 使用Qt5远程调试程序时QXcbConnection : Could not connect to display,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50801200/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com