Hi35xx NVR GDB调试

 

1. 下载gdb源代码

嵌入式Linux
的GDB 调试环境由Host
和Target
两部分组成,Host
端使用arm-linuxgdb,Target
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.202:3128
能够上去的,全部的版本号都有啊

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) 配置编译环境。交叉编译工具链为海思交叉工具编译链,我配置的交叉编译器为v400的arm-hisiv400nptl-linux

4)具体编译步骤

00nptl-linux --prefix=/opt/hisi-gdb/ -v

(--target 配置gdb
的目标平台。 --prefix
配置安装路径。 当然其它路径也能够, .跟以下配置一致00nptl-linux-gdb
须要, 打开

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

配置完毕后生成makefile

2、make

  make install

00nptl-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

(gdb)target remote 192.168.1.143:2345

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

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

#(gdb)C  运行程序

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

5. Core文件调试方法

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

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

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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

注意:

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

#0 0x7bf99014 in ?? ()

#1 0x7bf020f8 in ?? ()

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

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

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

Hi35xx NVR GDB调试的更多相关文章

  1. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  2. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  3. gdb调试器的使用

    想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 ...

  4. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  5. gdb调试PHP扩展错误

    有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查 ...

  6. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

  7. gdb调试

    ·代码(实验楼中的代码,改了部分数值)命名为test.c int g(int x) { return x + 7; } int f(int x) { return g(x); } int main(v ...

  8. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  9. GDB调试汇编堆栈

    GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...

随机推荐

  1. Weka中数据挖掘与机器学习系列之Exploer界面(七)

    不多说,直接上干货! Weka的Explorer(探索者)界面,是Weka的主要图形化用户界面,其全部功能都可通过菜单选择或表单填写进行访问.本博客将详细介绍Weka探索者界面的图形化用户界面.预处理 ...

  2. AnkhSvn介绍 插件

    转载:http://www.cnblogs.com/lyhabc/articles/2483011.html AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交.更新 ...

  3. 推荐的JavaScript编码规范

    http://www.qdfuns.com/notes/26812/7825414125719306fa409c709ee7b2a3.html

  4. java 返回json格式的数据

    1 阿里巴巴的fastjson import com.alibaba.fastjson.JSON; 使用的时候 JSON.toJSON(list); 2  Gson 解析json数据 import c ...

  5. 如何把本地的项目推送到github上面去

    前题:本地已经建好了项目,但电脑上没有安装git  (windows 系统) 1.首页从网上下载git 并安装. 2.进入项目所在的文件夹,右键鼠标 3.新建.gitignore文件 touch .g ...

  6. BZOJ5408: string(广义后缀自动机,LCT)

    传送门 解题思路: 首先在后缀树上,确定了一个节点就相当于确定了一个串,那么一个点对应的串在另外一个点对应的串产生贡献,当且仅当这个点在当前点子树内. 那么考虑一个新的点在串中对串答案的贡献在一条树链 ...

  7. 紫书 例题 9-7 UVa 11584 (线性结构上的动态规划)

    这道题判断回文串的方法非常的秀! 这里用到了记忆化搜索,因为会有很多重复 同时用kase来区分每一组数据 然后还有用递归来判断回文,很简洁 然后这种线性结构的动态规划的题,就是把 当前的这个数组分成两 ...

  8. OpenJDK源码研究笔记(十三):Javac编译过程中的上下文容器(Context)、单例(Singleton)和延迟创建(LazyCreation)3种模式

    在阅读Javac源码的过程中,发现一个上下文对象Context. 这个对象用来确保一次编译过程中的用到的类都只有一个实例,即实现我们经常提到的"单例模式". 今天,特意对这个上下文 ...

  9. Activiti工作流(4):编写一个HelloWorld

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.使用eclipse的activiti插件画流程图 在resource文件夹下新建一个工作流diagram 右键——new——other...— ...

  10. WMI获取进程CPU占用率

    Monitor % Process CPU Usage (specific process) http://www.tek-tips.com/viewthread.cfm?qid=395765 for ...