QT arm应用程序的Debug方法

7 篇文章 2 订阅

参考网址(并表示感谢)
https://blog.csdn.net/weixin_30292843/article/details/95570685
https://blog.csdn.net/chenyitao736866376/article/details/98731228
https://blog.csdn.net/csq_year/article/details/78845684

**方法一:通过core文件来获取错误信息**

首先配置Core文件的生成环境

步骤一:

首先通过 ulimit –c 查看 若为0,则不会产生对应的coredump,需要进行修改和设置。

ulimit -c unlimited (可以产生coredump且不受大小限制),这种设置仅对当前生效;

Tisp:如果想永久生效,在/etc/profile中加入以下一行,这将允许生成coredump文件 ulimit -c unlimited

步骤二:更改core dump生成路径

因为core dump默认会生成在程序的工作目录,但是有些程序存在切换目录的情况,导致core dump生成的路径没有规律,
所以最好是自己建立一个文件夹,存放生成的core文件。
我建立一个 mkdir ~/coredump 文件夹,在家目录里的coredump文件夹。
调用如下命令:
echo ~/coredump/core.%e.%p> /proc/sys/kernel/core_pattern
将更改core文件生成路径,自动放在这个~/coredump文件夹里。
在这里插入图片描述

测试是否能生成core文件

步骤一、制造错误

void MainWindow::c()
{
	// 异常位置
    int *i = NULL;
    *i = 100;
}

步骤二、运行,得出错误信息

在这里插入图片描述

步骤三、测试core文件和调试

1、把arm板子里的core文件复制到ubuntu里在这里插入图片描述
在这里插入图片描述
2、用gdb调试该core
由于我的交叉编译工具里面就有了gdb(大部分交叉编译工具都有带),所以我就直接用,也不用自己去交叉编译一个gdb,楼主之前尝试过,失败了!

由于大多数人都遇到打开gdb后,调试时出现问号这种情况。
出现原因和解决方法,这个博主写得很清楚:

https://blog.csdn.net/weixin_30292843/article/details/95570685

调试方法如下所示:

执行命令的格式:

gdb  可执行程序exe

(就是之前在板子上奔溃的程序)
在这里插入图片描述
进入gdb环境后

core-file core的名字

(从板子上复制出来的core文件)
在这里插入图片描述

**方法二:gdb+gdbserver实现远程调试**

配置gdb+gdbserver

一、由于官方已经提供了交叉编译工具包里面已经提供了gdb,所以我这里就直接用

arm-poky-linux-gnueabi-gdb

(如果需要自个交叉编译gdb,推荐网站:
https://blog.csdn.net/edwardlulinux/article/details/8070224

可下载:gdb-7.2a.tar.gz、gdb-7.4.1.tar.gz、gdb-7.10.1.tar.gz源码包
链接:https://pan.baidu.com/s/1SgDe_Yv4jvd_qsCMleHVfA
提取码:dymc
复制这段内容后打开百度网盘手机App,操作更方便哦

二、编译gdbserver
(如果有跟我情况一样的小伙伴们,在下载gdb包前先查看一下自个用的gdb版本号)
1、查看GDB版本号;

arm-poky-linux-gnueabi-gdb --version

GNU gdb (GDB) 7.10.1用的是7.10.1 版本的源码包
–host=x86_64-pokysdk-linux指定了编译后的程序需要在x86运行
–target=arm-poky-linux-gnueabi该参数的目的是让配置程序知道,这个软件被编译后,用于处理什么平台上的文件的。所以说这个GDB是用于处理arm平台上的文件

2、解压下载的GDB源码包

tar xvf gdb-7.10.1.tar.gz 
cd gdb-7.10.1/

3、编译
进入gdbserver文件下编译

 cd /home/gec/m_gdb/gdb-7.10.1/gdb/gdbserver

编译配置

 ./configure --target=arm-poky-linux-gnueabi --prefix=/opt/gdbserver/ --host=arm-poky-linux-gnueabi

编译
make & make install
结果:
在这里插入图片描述
编译过程可能遇到的问题:

  • 错误问题1:

In file included from ./common/common-defs.h:46:0,
from defs.h:28,
from linux-tdep.c:20: linux-tdep.c: In function ‘linux_core_info_proc_mappings’: ./common/gdb_assert.h:26:14: error:
size of array ‘never_defined_just_used_for_checking’ is negative
extern int never_defined_just_used_for_checking[(expr) ? 1 : -1]
linux-tdep.c:984:3: note: in expansion of macro ‘gdb_static_assert’ gdb_static_assert (sizeof (ULONGEST) >= 8);

解决方法:

不是到/m_gdb/gdb-7.10.1下配置,而是在/m_gdb/gdb-7.10.1/gdb/gdbserver文件下配置

测试

把 生成的gdbserver工具复制到arm板上
arm-poky-linux-gnueabi-gdbserver

1、在arm板上通过gdbserver工具,执行错误应用程序 wifierro:

./arm-poky-linux-gnueabi-gdbserver 192.168.1.80:5555 wifierro

2、在虚拟机ubuntu上执行gdb工具

arm-poky-linux-gnueabi-gdb ./wifierro

进入gdb后连接

(gdb) target remote 192.168.1.80:5555

可能遇到了大多数人都会遇到的问题

gdb调试时重要的函数名是问号

在这里插入图片描述
解决方法:
Reading /lib/.debug/ld-2.23.so from remote target…
(no debugging symbols found)…done.
----------------》说明这个库没有找到

我们先不要慌
继续按C允许程序

(gdb) c

在这里插入图片描述
这时GDB告诉我们需要设置一下环境:

(dfb) set solib-search-path /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/

/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/ 是通过寻找 /lib/.debug/ld-2.23.so ,找到这库的路径就可以解决GDB出现问号的问题
寻找/lib/.debug/ld-2.23.so

find / -name ld-2.23.so

提示:如果多个路径,就多尝试,总有一个路径的正确的
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值