热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GDB调试_Hi35xxNVRGDB调试

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Hi35xxNVRGDB调试相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Hi35xx NVR GDB调试相关的知识,希望对你有一定的参考价值。




Hi35xx NVR GDB调试

 

1. 下载gdb源代码

嵌入式Linux
GDB 调试环境由Host
Target
两部分组成,Host
端使用armlinuxgdb
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.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.s
html

我下载的版本号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-gdb
source  ./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
为挂载文件夹

 














推荐阅读
  • 本指南详细介绍了如何使用 `apt-get` 命令在 Ubuntu 系统上部署 MySQL 5、Apache 2、PHP 5 及 phpMyAdmin。首先,建议读者查阅 Ubuntu 的官方文档以获取更多背景信息。通过本文,您将逐步了解每个软件包的安装过程及其配置方法,确保系统环境的稳定性和安全性。此外,还将提供一些常见问题的解决方案,帮助用户顺利完成部署。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • 对于以压缩包形式发布的软件,其目录中通常包含一个配置脚本 `configure`。该脚本的主要功能是确定编译所需的各项参数,如头文件的位置和链接库的路径,并生成相应的 `Makefile` 以供编译使用。通过运行此脚本,开发者可以确保软件在不同环境下的正确编译与安装。此外,该脚本还能够检测系统依赖项,进一步提高编译过程的可靠性和兼容性。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • SQL Server开发技巧:修改表结构后的视图批量更新方法与实践 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 欢迎来到Netgen新时代:探索网络生成技术的无限可能
    欢迎进入Netgen的新时代:探索网络生成技术的无限潜力。本文将详细介绍如何编译下载的Netgen源代码,生成Netgen程序,并提供开发所需的库nglib。此外,还将探讨Netgen在现代网络设计与仿真中的应用前景,以及其在提高网络性能和可靠性方面的关键作用。 ... [详细]
  • 在操作系统中,阻塞状态与挂起状态有着显著的区别。阻塞状态通常是指进程因等待某一事件(如I/O操作完成)而暂时停止执行,而挂起状态则是指进程被系统暂时移出内存,以释放资源或降低系统负载。此外,本文还深入分析了`sleep()`函数的实现机制,探讨了其在不同操作系统中的具体实现方式及其对进程调度的影响。通过这些分析,读者可以更好地理解操作系统如何管理进程的不同状态以及`sleep()`函数在其中的作用。 ... [详细]
  • PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化
    PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化 ... [详细]
author-avatar
玉乔嘉芸孟峰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有