嵌入式linux实时操作系统及应用编程pdf(嵌入式linux都有哪些调试信息)

目录目录前言GDB调试工具介绍GDB调试教程gcc调试相关编译选项GDB交叉调试环境搭建下载地址编译过程总结链接地址前言项目遇到一个问题,就是程序在Ubuntu下运行的时候是正常的,至少大部分时候运行是正常的,但是移到开发板上,就会出现段错误。这时候突然想到了GDB,从来都没有接触过调试工具,以前的调试都是使用printf直接打印的方式!!!

大家好,又见面了,我是你们的朋友全栈君。

目录

前言

项目遇到一个问题,就是程序在Ubuntu下运行的时候是正常的,至少大部分时候运行是正常的,但是移到开发板上,就会出现段错误。这时候突然想到了GDB,从来都没有接触过调试工具,以前的调试都是使用printf直接打印的方式!!!效率极低!准备鸟枪换炮!!!

GDB

调试工具介绍

linux下的程序调试方法汇总,这篇文章中介绍了linux下调试的常用方法。

GDB调试教程

GDB是一个由GNU开源组织发布的、UNIX/Linux操作系统下的、基于命令行的、功能强大的程序调试工具。这篇文章GDB十分钟教程,介绍了GDB调试程序的大体流程。
程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。

gcc调试相关编译选项

  • -g
    gdb主要调试的是C/C++程序。要调试C/C++程序,首先在编译时,必须要把调试信息加到可执行文件中,使用编译器(cc/gcc/g++)的-g参数即可。

GDB交叉调试环境搭建

嵌入式Linux的GDB调试环境由Host端(PC机)和Target端(ARM)两部分组成,Host端使用arm-linux-gdb调试工具,而Target端需要运行gdbserver,两者之间可通过串口或者网口连接,把ARM应用程序在Target端的执行情况返回Host。调试跟踪命令从Host端的arm-linux-gdb中发出。搭建交叉调试环境 arm-linux-gdb配合gdbserver

下载地址

GDB下载地址

编译过程

  • gdb的编译过程
// 创建gdb放置的目录
mkdir arm-gdb
// 解压
tar -xvf gdb-8.1.tar.gz
// 配置
./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --prefix=/xxx/arm-gdb CC=arm-linux-gnueabihf-gcc
// 编译、安装
make -j4
make install
  • gdbserver编译过程
cd /xxx/gdb-8.1/gdb/gdbserver
// 配置
./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf  CC=arm-linux-gnueabihf-gcc
// 编译
make 
// 注意:不需要make install
// 去除符号信息
arm-linux-gnueabihf-strip gdbserver -o gdbserver

使用方法

  • 第一步:nfs方式实现PC和开发板之间的互通
    nfs挂载命令示例:
mount -t nfs 192.168.1.95:/nfs /opt -o nolock
  • 第二步:Ubuntu下交叉编译测试程序
arm-linux-gnueabihf-g++ -g helloWorld.cpp -o helloWorld
// 注意:要加-g参数才能进行调试
  • 第三步:拷贝gdbserver到/opt目录下(此处是博主的nfs挂载目录)
  • 第四步:拷贝测试程序到/opt目录下
    可以现在开发板上执行这个程序,看是否可以执行成功。交叉编译命令示例:
arm-linux-gnueabihf-g++ -g helloWorld.cpp -o helloWorld
  • 第五步:gdbserver使用方法
    格式:gdbserver 开发板ip地址:通信端口(自己设定) 测试程序 【命令行参数】
    举例如下:
gdbserver 192.168.1.90:20 helloWorld
// 192.168.1.90是开发板地址
// 20是端口号
// helloWorld是测试程序

打印信息如下:

Process helloWorld created; pid = 1999
Listening on port 20
  • 第六步:Ubuntu下启动arm-linux-gnueabihf-gdb
arm-linux-gnueabihf-gdb helloWorld

注意:如果要直接这样使用arm-linux-gnueabihf-gdb,需要设置环境变量,示例如下:

export PATH=$PATH:/xxx/arm-gdb/bin

打印信息如下:

Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf".
For bug reporting instructions, please see:
<https://bugs.launchpad.net/gcc-linaro>...
Reading symbols from /nfs/helloWorld...done.
(gdb)

注意:打印最后进入了gdb的调试环境:(gdb)
– 第七步:远程连接开发板端口
(gdb):target remote 192.168.1.90:20
Ubuntu打印信息如下:

Remote debugging using 192.168.1.90:20
Reading symbols from /opt/arm-4.9-toolchains/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3...done.
Loaded symbols for /opt/arm-4.9-toolchains/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3
0xb6fd7a40 in _start () from /opt/arm-4.9-toolchains/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3

开发板打印信息如下:

Remote debugging from host 192.168.1.95

完成上面的7步之后,就可以使用GDB对开发板程序进行调试了。

总结

虽然交叉编译GDB的库的过程很顺利,但是中途发现大部分博客的参数都是-host=arm-linux,没有经过思考就胡乱编译,后来才改对。应该来说,gdb可以算是交叉编译工具链的一个工具,只是在交叉编译工具链中可能不包含这一部分,所以需要交叉编译gdb的库,最终得到arm-linux-gnueabihf-gdb这要的调试工具。

链接地址

linux下的程序调试方法汇总
GDB十分钟教程
linux使用gdb调试程序完全教程
搭建交叉调试环境 arm-linux-gdb配合gdbserver

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129230.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • animation rotate_canvas scale

    animation rotate_canvas scaleScaleAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation详解

    2022年10月15日
  • linux 解压zip压缩包命令

    linux 解压zip压缩包命令unzip文件名.zip-d解压位置例如:unzip微信.zip-ddemowx

    2022年5月10日
  • cmdping命令_cmd ping端口命令

    cmdping命令_cmd ping端口命令标题cmd-ping命令一、ping命令:通过发送Internet控制消息协议(ICMP)回响请求消息来验证与另一台TCP/IP计算机的IP级连接。相应的回响应答消息的接收情况将和往返过程的时间一起显示出来。Ping是用于检测网络连接性、可到达性和名称解析的疑难问题的主要TCP/IP命令。如果不带参数,ping将显示帮助。(ping-PacketInternet…

    2022年9月23日
  • 怎样使用 App Studio 高速定制你自己的 Universal Windows App

    怎样使用 App Studio 高速定制你自己的 Universal Windows App

    2022年1月24日
  • MyEclipse激活成功教程 CI-2018.9.0版本

    MyEclipse激活成功教程 CI-2018.9.0版本介绍myeclipse是eclipse进化版,有很强大的功能,但是,它是收费的。这也是阻碍大多数人使用它的原因。作为学生,想使用该工具进行学习,但苦于资金有限,只能进行激活成功教程后再学习。本人找了很多的激活成功教程教程,最初感觉很简单,就打算直接开搞;但是,按照教程一步一步来,结果发现,自己就是不能成功。为此,我还安装了很多不同的版本,但由于没有找到根本原因,全都以失败告终。后来,仔细研究后才知道原因…

    2022年9月26日
  • 你知道如何从零开始学c++游戏编程吗「建议收藏」

    你知道如何从零开始学c++游戏编程吗「建议收藏」在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。平台与编程语言选择首先,游戏开发的平台就有很多类型:个人主机平台:Windows、Linux、MacOC;移动平台:iOS、Android、WindowsPhone、BlackBerryOS、Symbian;专业主…

    2022年6月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号