嵌入式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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ideavim有什么用_intellij idea社区版

    ideavim有什么用_intellij idea社区版IdeaVim史诗级分享之前就对vim非常着迷,而我本身就是写java代码的,经常使用Idea这个IDE。2019年初,Idea里一个和vim有关的插件,深深的吸引了我,名字叫Ideavim。后来我就开始使用了。用它的时候,idea原本的快捷键很多就会失去自己的效力。需要进行重新映射,我花了一些时间将一些非常常用的快捷键整理收集,然后赋予其ideavim的快捷键。取得了非常不错的效果。使用vim,最大的好处,是减少打代码的时候进行键鼠切换的频率。有一种相当不错流畅感

    2022年10月1日
    2
  • centos打开windows的ftp 无法显示内容 显示空白内容

    centos打开windows的ftp 无法显示内容 显示空白内容

    2021年8月24日
    52
  • MySqlConnector连接选项「建议收藏」

    MySqlConnector连接选项「建议收藏」MySqlConnectorMySqlConnectorhttps://mysqlconnector.net/connection-options/连接选项MySqlConnector支持大多

    2022年7月1日
    53
  • Ffmpeg安装_linux离线安装ffmpeg

    Ffmpeg安装_linux离线安装ffmpeg目录安装包下载解压安装包配置环境变量总结安装包下载作为音视频处理重要软件ffmpeg,是一定要装好的。windows安装包下在链接:资源包地址解压安装包下载安装包后解压到需要的目录。配置环境变量找到控制面板->点击系统->点击高级系统设置->点击环境变量配置解压或文件夹路劲到Path变量中。一直确认后,点击win+r打开cmd。输入ffmpeg-i命令验证一下是..

    2022年9月13日
    2
  • Pycuda 学习笔记(二)gpuarray学习

    Pycuda 学习笔记(二)gpuarray学习本博客参照学习文档https://documen.tician.de/pycuda/array.html通过GPUArray矩阵类可以将numpy中的数组和矩阵直接转换成cuda可处理类型,该步骤即将CPU中的数据复制到GPU中。导入gpuArray和numpyimportpycuda.gpuarrayasgpuarrayimportnumpyasnp将numpyndar

    2025年6月10日
    2
  • C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」

    C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」想要了解更多,可以添加扣扣群143440558,免费交流,免费下载以上文件,免费了解更多编写OPC客户端,网上的资料一般是一上来就要求找OPCDAAuto.dll,其实我想说,用VS,那都是多此一举,当然,如果你是在需要,我也可以提供给您最新版OPCDAAuto.dll(v2.2.5.30)(https://download.csdn.net/download/wanghuaihu/11…

    2022年6月20日
    101

发表回复

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

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