码迷,mamicode.com
首页 > 数据库 > 详细

Hi35xx NVR GDB调试

时间:2018-02-01 17:38:21      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:china   社区   alt   text   http   跟踪   enter   提示   堆栈   

Hi35xx NVR GDB调试

 

1. 下载gdb源代码

嵌入式Linux GDB 调试环境由Host Target 两部分组成,Host 端使用armlinuxgdbTarget Board 端使用gdbserver。这样,应用程序在嵌入式目标系统上执行。而gdb 调试在Host 端,所以要採用远程调试(remote)的方法。进行GDB 调试。目标系统必须包含gdbserver 程序(在主机上正对硬件平台编译成功后下载到目标机上),宿主机也必须安装GDB 程序。

一般Linux 发行版中都有一个能够执行的GDB,但开发者不能直接使用该发行版中的GDB 来做远程调试,而要获取GDB 的源码包。针对arm 平台作一个简单配置,又一次编译得到对应GDB

GDB 的源码包能够从
http://www.gnu.org/software/gdb/download/
http://ftp.gnu.org/gnu/gdb/ 211.95.105.2023128 能够上去的,全部的版本号都有啊
http: //ftp.cs.pu.edu.tw/linux/sourceware/gdb/releases/下载
ftp://ftp.gnu.org/gnu/gdb
外网的ftp 我常常上不去。国内常见的开源社区的下载频道通常都有下载的
http://download.chinaunix.net/download/0004000/3482.shtml

我下载的版本号gdb-7.10.tar.gz。下载到某个文件夹,如/opt

 

參考资料:gdb+gdbserver 方式进行ARM 板上程序调试 http://blog.csdn.net/hejianhua/article/details/7312979

XML

http://blog.csdn.net/yangzhongxuan/article/details/13002789

 

2.配置编译环境

1) 解压gdb源代码tar zxvf gdb-7.10.tar.gz -C /opt/

2) 进入到gdb源代码文件夹,cd /opt/gdb-7.10

3) 配置编译环境。交叉编译工具链为海思交叉工具编译链,我配置的交叉编译器为v400arm-hisiv400nptl-linux

4)具体编译步骤

1、./configure --target=arm-hisiv400nptl-linux --prefix=/opt/hisi-gdb/ -v

(--target 配置gdb 的目标平台。 --prefix 配置安装路径。 当然其它路径也能够, .跟以下配置一致就可以。须在环境变量中声明, 启动arm-hisiv400nptl-linux-gdb 须要, 打开

vi  /etc/profile , 加入export PATH=$PATH:/opt/hisi-gdbsource  ./etc/profile使配置生效)

配置完毕后生成makefile

 技术分享图片

2、make
  make install
    生成arm-hisiv400nptl-linux-gdb,并存入/opt/hisv-gdb  /bin

3、安装完毕后进入cd  /opt/gdb-7.10/gdb/gdbserver

      ./configure --target=arm-hisiv400-linux  --host=arm-hisiv400-linux
      --target=arm-hisiv400-linux表示目标平台。

--host 表示主机端执行的是arm-hisiv400-linux-gdb
    make 生成gdbserver

 

3.代码加-g编译。

在代码路径下E:\my_code\his3520d_v2-8-0-8_3536\Build进入到Build文件夹下。打开Rules.mak文件进行改动。

 技术分享图片

定义debug = 1  编译代码,注意可运行文件生成路径。Debug版本号编译生成的可运行文件和release版本号生成的可运行文件路径不同。

out目录以下比如Hi3536: (\Out\Hi3536\app)目录下会生成一个debug的目录,debug版本号生成的可运行程序存放在此目录以下。

 

4.gdb源代码编译好的可运行程序gdb gdbserver复制到挂载路径下。

板端执行命令:

#./gdbserver 192.168.1.141:2345 vfware  

(命令格式 #. /gdbs er v er  主机I P: port号 程序)

出现提示:

Process  borad  created; pid = 776

Listening on port 2345

Remote debugging from host 192.168.1.141

 

ubuntu下执行命令:

在主机上执行arm-hisiv400-linuxnptl-gdb。注意这个gdb是用源代码编译出来的,在安装路径/opt/hisiv-gdb/bin路径下。

 

在主机端执行gdb

#. /gdb

gdbtarget remote 192.168.1.143:2345

(命令格式target remote 开发板I P:port号 (和板子上执行gdbserver 的port号要同样))

具体调试步骤请看上面文档(gdb+gdbserver 方式进行ARM 板上程序调试.pdf

#gdbC  运行程序

当代码出现段错误,输入bt 来查看堆栈信息跟踪问题出现错误所在位置。

 

 

 

5. Core文件调试方法

编译上面的gdbgdbserver后,相同拷贝gdbgdbserver到挂载文件夹。

执行命令ulimit -c  10000000000  设置暂时core文件的大小为无穷大。注意每次又一次执行程序都要设置

然后运行./gdb  vfware  core    (vfware 为调试程序,也是加-g 编译出来的程序。注意libuv库中实用到clock_gettime()clock_getres()函数,加-g编译时会报没有定义错误,所以编译时还要加 -lrt, 才干成功编译debug版本号)

程序假设产生段错误Segmentation fault. 会在当前挂载路径下产生一个core文件。

运行完./gdb  vfware  core后出现例如以下信息

 技术分享图片

 技术分享图片

使用命令bt查看当前堆栈的信息。既出现错误的地方

 技术分享图片

 

注意:

     可能会出现以下这样的情况

#0 0x7bf99014 in ?? ()

#1 0x7bf020f8 in ?? ()

 技术分享图片

看不到堆栈的信息,仅仅有地址和问号。我们能够看到上面的提示信息

 技术分享图片

意思是有5个共享库的函数找不到。我们把板子上的库复制到挂载文件夹就可以

cp /lib/ /mnt/nfs  -rf     /lib为目标板上的库目录   /mnt/nfs 为挂载文件夹

 

Hi35xx NVR GDB调试

标签:china   社区   alt   text   http   跟踪   enter   提示   堆栈   

原文地址:https://www.cnblogs.com/zhchoutai/p/8398835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!