QT:使用QT Creator对ARM进行远程调试挂起,命令行GDB运行正常

QT:使用QT Creator对ARM进行远程调试挂起,命令行GDB运行正常,qt,remote-debugging,Qt,Remote Debugging,我使用的是来自Olimex的Allwinner A33(四核ARM)开发工具包。它运行的是Ubuntu 16.04根文件系统。我的主机电脑运行64位Kubuntu 16.04。我使用GCC6.1.1(Linaro构建)作为交叉编译器和QtV5.5。仅使用通过包管理器预构建的.deb包。没有什么是我自己从源头上建立起来的 我已经使用下面描述的场景测试了一个简单的QT应用程序(主窗口只有一个标签,没有其他应用程序代码)。在所有场景中,只有来自QT Creator的调试导致了问题: 我使用X11转发(

我使用的是来自Olimex的Allwinner A33(四核ARM)开发工具包。它运行的是Ubuntu 16.04根文件系统。我的主机电脑运行64位Kubuntu 16.04。我使用GCC6.1.1(Linaro构建)作为交叉编译器和QtV5.5。仅使用通过包管理器预构建的.deb包。没有什么是我自己从源头上建立起来的

我已经使用下面描述的场景测试了一个简单的QT应用程序(主窗口只有一个标签,没有其他应用程序代码)。在所有场景中,只有来自QT Creator的调试导致了问题:

我使用X11转发(-X)ssh到远程目标。主窗口出现在我的主机PC上,并且功能正常,即使出现以下警告:

libEGL warning: DRI2: failed to authenticate
QXcbConnection: XCB error: 1 (BadRequest), sequence: 380, resource id:   
102760451, major code: 154 (Unknown), minor code: 1
QXcbShmImage: shmget() failed (38) for size 480000 (400x300)
1) 从远程目标上的命令行手动启动应用程序

877 ? Ss     0:00 bash -c test -f /etc/profile && . 
      /etc/profile;test -f $HOME/.profile && . $HOME/.profile; 
      DISPLAY=':10.0' gdbserver --multi :10000
878 ? S      0:00 gdbserver --multi :10000
881 ? Sl     0:00 /DemoApp
888 ? t      0:00 /DemoApp
2) 直接在远程目标上启动命令行gdb会话 (gdb)信息线程

Id Target Id Frame
1 Thread 0xb6ff1220 (LWP 984) "DemoApp" 0xb635da50 in poll () at 
  ../sysdeps/unix/syscall-template.S:84
2 Thread 0xb3c2c440 (LWP 988) "QXcbEventReader" 0xb635da50 in poll () 
  at ../sysdeps/unix/syscall-template.S:84
3 Thread 0xb0c42440 (LWP 989) "llvmpipe-0" __libc_do_syscall () at 
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
4 Thread 0xb0442440 (LWP 990) "llvmpipe-1" __libc_do_syscall () at 
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
5 Thread 0xafc42440 (LWP 991) "llvmpipe-2" __libc_do_syscall () at 
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
6 Thread 0xaf442440 (LWP 992) "llvmpipe-3" __libc_do_syscall () at 
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46 
3) 在远程主机上运行GDB服务器,并使用命令行GDB从主机PC连接到它

远程目标 主办方 .gdbinit的内容

set debug-file-directory /opt/arm-linux-gnueabihf-rootfs/usr/lib/debug
set sysroot /opt/arm-linux-gnueabihf-rootfs
target remote 192.168.7.1:5555
$/opt/arm-linux-gnueabihf-v6.1.1/bin/arm-linux-gnueabihf-gdb DemoApp

Reading symbols from DemoApp...done.
0xb6fd7a40 in _start () from /opt/arm-linux-gnueabihf-rootfs/lib/ld-
linux-armhf.so.3
(gdb) 
(gdb) continue
Continuing.
Cannot parse expression `.L966 4@r4'.
warning: Probes-based dynamic linker interface failed.
Reverting to original interface.

(gdb) info threads
Id Target Id Frame
1 Thread 999.999 "DemoApp2" 0xb635da50 in poll () at     
  ../sysdeps/unix/syscall-template.S:84
2 Thread 999.1001 "QXcbEventReader" 0xb635da50 in poll () at 
  ../sysdeps/unix/syscall-template.S:84
3 Thread 999.1002 "llvmpipe-0" __libc_do_syscall () at 
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
4 Thread 999.1003 "llvmpipe-1" __libc_do_syscall () at    
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
5 Thread 999.1004 "llvmpipe-2" __libc_do_syscall () at 
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
6 Thread 999.1005 "llvmpipe-3" __libc_do_syscall () at    
  ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
4) 使用“运行”按钮从QT creator内启动应用程序可以正常工作。 远程目标上的进程列表:

978 pts/8 S 0:00 dbus-launch --autolaunch 
    e0b04e02d3bd48f29553fcf6f7149394 --binary-syntax --close-stderr
979 ? Ss 0:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-
    address 7 --session
1033 ? Ss 0:00 bash -c test -f /etc/profile && . /etc/profile;test -f 
     $HOME/.profile && . $HOME/.profile; DISPLAY=':10.0' /DemoApp ''
1034 ? Sl 0:00 /DemoApp
5) 从QT Creator中调试会话 唯一不起作用的场景是从QT Creator本身启动远程调试。现在QT Creator中有7个线程在运行 而不是之前场景中的6

Thread #1: DemoApp2: _dbus_read
Thread #2: DemoApp2: __libc_fork, __libc_do_syscall  <<-- Extra
Thread #3: QXcbEventReader: poll
注意:这些错误不再出现:QXcbConnection:XCB error:1或 QXcbShmImage:shmget()失败(38)

远程目标上的进程列表

877 ? Ss     0:00 bash -c test -f /etc/profile && . 
      /etc/profile;test -f $HOME/.profile && . $HOME/.profile; 
      DISPLAY=':10.0' gdbserver --multi :10000
878 ? S      0:00 gdbserver --multi :10000
881 ? Sl     0:00 /DemoApp
888 ? t      0:00 /DemoApp

应用程序的两个副本正在远程目标上运行。

我已经通过选择Windows->View->Debugger log检查了QTCreator中的GDB日志

我注意到应用了两个GDB设置:

<17-interpreter-exec console "set target-async off"
<18-interpreter-exec console "set detach-on-fork off"

<17-interpreter-exec console "set target-async off"
<18-interpreter-exec console "set detach-on-fork off"