QT一键远程调试程序

    xiaoxiao2021-04-17  59

    在嵌入式开发中,如何使用QT去调试程序是很重要的。调试无非分为以下几种方式:

    (1)最初级的方式就是编译目标程序,然后拷贝到开发板,通过printf函数输出一些调试信息来调试程序。

    (2)移植GDB,编译完目标程序后,在开发板运行GDB server,然后使用QT远程调试。

    (3)使用QT一键远程调试程序,需要将目标程序拷贝到开发板。

    方式一不仅麻烦还很难找出问题。方式而虽然可以调试,但很麻烦,每次编译玩程序后都得开呗到开发板。第三种方式灵活简单。本文是如何搭建第三种方式。过程中也包含了第二种方式。

    主要分为以下几个部分:

    第一部分:GDB调试工具安装

    一.预处理(否则MAKE时候有错误)

    sudo apt-getinstall texinfo

    sudo apt-getinstall libncurses5-dev

    sudo apt-getinstall m4

    sudo apt-getinstall flex

    sudo apt-getinstall bison

    如果不做预处理,MAKE可能会出现下述错误

    1、error: no termcap library found

    2、error: makeinfo is required for compilation

    二.搭建过程

    在虚拟机Linux下ubuntu12.04

    0.下载gdb-7.7.1.tar.gz(http://www.gnu.org/software/gdb/download/)手动到网页下载

    1、将gdb-7.7.tar.gz拷贝到任意的位置

    2、解压gdb-7.7.1.tar.gz

       tar -zxvf gdb-7.4.tar.gz

    3、编译arm-linux-gdb(下面/usr/local是安装目录,可自行更改)

      到目录gdb-7.7.1下

       cd gdb-7.7.1

       $./configure --target=arm-linux--prefix=/usr/local/arm-gdb7.7 --with-python

       target指明编译生成的GDB用于调试ARM-LINUX程序,prefix指明安装目录

    --with-python将python模块编译进来。因为QT creator3.1版本开始,调试必须有Python功能。

    Ubuntu自带Python。位于/usr/bin/。

       $make

    如果make出现如下错误

    checkint for python2.7... /usr/bin/python2.7 checkint for python2.7... no configure: error: no usable python found at python2.7则需要在执行apt-get install python-dev。安装完成后再执行make。

       #make install

       这样就可以在/usr/local/arm-gdb7.7/bin目录下看到如下三个可执行文件

       arm-linux-gdb arm-linux-gdbtui arm-linux-run

    4、编译GDB Client

       #cd ./gdb/gdbserver   (进入gdb-7.7.1目录里执行该句)

       #./configure --target=arm-linux--host=arm-linux

       #make //编译用于目标机的stub程序生成gdbserver是GDB客户端程序,在板子上运行。

    5、将gdbserver通过你搭建的环境下载到开发板(我的环境是nfs)

    三,使用例程

    1.编辑文件

    # geditgdbtest.c

    #include <stdio.h>

    int func(int n)

    {

      int sum=0, i;

      for (i=0; i<n; i++)

        {

           sum += i;

       }

     return sum;

     }

     

     int

     main(void)

     {

     int i;

     long result = 0;

     for (i=0; i<=100; i++)

     {

          result += i;

     }

     printf("result[1-100] = %d \n",result);

     printf("resutl[1-225] = %d \n",func(255));

     return 0;

     }

    # arm-linux-gcc-g gdbtest.c -o gdbtest // 交叉编译

    2.下载文件到目标板: gdbtest和gdbserver

     假设 host pc ip:192.168.1.178

      board ip:192.168.1.20

    将文件拷贝到目标板上(通过NFS或其他工具)

    检查目标板上是否有gdbtest和gdbserver两个文件。(最好从共享文件夹把这两个文件移到目标板的其他一个目录下面)

     

    3.运行调试

    client board:

      #./gdbserver 192.168.1.178:1234 gdbtest //目标板上运行gdbtest 监听端口1234

    host pc:

    #cd/usr/local/arm-gdb7.7/bin/ (就是arm-gdb的目录

    #cp gdbtest /usr/local/arm-gdb7.7/bin/ //将前面编译的文件gdbtest拷贝到此目录

     

    测试

    #./arm-linux-gdbgdbtest

      (gdb)target remote 192.168.0.232:1234 // 连接到开发板 成功后就可以进行调试

    (gdb)list or l

    (gdb)break func

    (gdb)break 22

    (gdb)info br

    (gdb)continue orc // 这里不能用 run

    (gdb)next or n

    (gdb)print or presult

    (gdb) finish // 跳出func函数

    (gdb) next

    (gdb) quit

    第二部分:Qt下使用GDB远程调试ARM板

    需要工具:ARM开发板,GDB调试工具,Qt,nfs服务器

    1.   GDB的安装,参照上文

    2.   启动nfs服务器(一般都默认启动),目标板挂载nfs共享文件夹,这里目标板的目录是

    /work/zsaj/

    3.   使用Qt创建一个工程,并把整个工程目录(如qt4_test和qt4_test-build-arm)创建到nfs服务器的共享根目录下面。这里我们用的是

    /home/alexon/Mpiwork/

    4.   编译工程,此时会同步在目标板上生成可执行文件

    5.   目标板上启动目标程序的GDB调试模式

    # ./gdbserver  192.168.1.22:1234  ./zsaj/1234-build-arm/1234  -qws

    第一个是gdb服务器,第二个参数是主机ID和自定义的监视口,第三个参数是目标板上的目标程序,最后一个是-qws参数。

    6.   Qt菜单栏,选择debug->start debugging->start andattach to remote application.

    Debugger选择之前安装的gdb调试工具,这里是/home/alexon/arm-gdb7.7/bin/arm-linux-gdb

    Local executable选择该工程编译生成的本机上的可执行文件,这里是/home/alexon/Mpiwork/1234-build-arm/1234

    Host and port设置的是目标板的IP以及刚才目标板定义的监视口

    最后Architecture选择i386,OK即可开始调试,记得设置断点。

    至此就是第二种调试方法了。

    转载请注明原文地址: https://ju.6miu.com/read-673806.html

    最新回复(0)