【嵌入式】Linux开发工具gdb及远程调试

gdb

GDB, GNU 的调试器称为 gdb(ddd),该程序是一个交互式工具,工作在字符模式。

GDB可完成如下的调试任务

  • 设置断点;
  • 监视程序变量的值;
  • 程序的单步执行;
  • 修改变量的值。

gdb安装

开放root用户权限:sudo -s,Linux终端依次输入以下代码即可。

apt-get update
apt-get install gdb
Do you want to continue? [Y/n] y

测试使用:
编写一个简单的 hello.c

#include<stdio.h>
int main(){
    printf("Hello World!\n");
}

在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。

  • 可在 Makefile 中如下定义 CFLAGS 变量:CFLAGS = -g
  • 或者在使用gcc编译的时候加上-g选项,gcc -g -o hello hello.c

运行 gdb 调试程序时通常使用如下的命令:

gdb [文件名]

例如使用 gdb 调试 hello,首先gcc -g -o hello hello.c , 然后gdb hello
在这里插入图片描述

gdb调试命令

help NAME:显示指定命令的帮助信息。
file FILE:装载指定的可执行文件进行调试。
kill:终止正被调试的程序。
list:显示源代码段。
break NUM:在指定的行上设置断点。
run:执行当前被调试的程序 。
continue:继续执行正在调试的程序。
step:向前执行一行源代码,遇到函数的情况下,进入函数内部执行。
stepi:执行一条机器指令。
next:单步执行一条语句,不单步执行进入函数体。
nexti: 单步执行一条指令,如果该指令是函数调用,那么程序执行直到该函数调用结束时才停止。
set 变量 = 表达式set 变量 := 表达式:设置程序中变量的值。
display EXPR 每次程序停止后显示表达式的值,表达式由程序定义的变量组成。
print 变量或表达式 :打印变量或表达式的值。

info break:显示当前断点清单,包括到达断点处的次数等。
info files:显示被调试文件的详细信息。
info func:显示所有的函数名称。
info local:显示当函数中的局部变量信息。
info prog:显示被调试程序的执行状态。
info var:显示所有的全局和静态变量名称。

delete 断点号:清除断点或自动显示的表达式。
disable 断点号列表(断点号之间用空格间隔开):让指定断点失效。
enable 断点号列表:和disable相反,恢复失效的断点。
ignore 断点号 忽略次数:忽略断点。
quit:退出gdb。

gdb 调试步骤

第一步:用-g选项编译程序 arm-linux -g -o hello hello.c
第二步:gdb 程序 gdb hello
第三步:查看源码 list
第四步:在 main 函数设置断点 break main
第五步:运行 run
第六步:调试 step/next/break/cont/print/display
第七步:退出 quit
在这里插入图片描述

嵌入式远程调试

在这里插入图片描述

在开发板上运行 gdbserver

在这里插入图片描述

在PC端执行

ddd -debugger ./arm-linux-gdb greeting
在这里插入图片描述
在这里插入图片描述

其他Liunx开发工具

交叉反汇编器 arm-linux-objdump

arm-linux-objdump -D -S hello > out.s:将反汇编文件输出到out.s
在这里插入图片描述

查看elf文件工具 arm-linux-readelf

arm -linux-readelf -a hello:查看hello可执行文件。
在这里插入图片描述
arm-linux-readelf -d hello:查看可执行文件需要的共享库
在这里插入图片描述

图形化开发套件:CODE::BLOCKS

在这里插入图片描述

课后作业

(1) 假设温度传感器文件 TempSensor.c 中使用到冒泡排序算法对取到的 10 次温度进行排序,对应函数名为 BubbleFun(),然后去除最高和最低值,将余下的 8 个温度值相加取平均作为本次测量温度,在编译时希望加上调试信息,则需要在编译选项时添加 (-g),在调试过程中,需要启动程序运行并停止在 BubbleFun() 函数入口处,写出 gdb 调试指令序列流。

gcc -g -o TempSensor TempSensor.c
gdb TempSensor
list
break BubbleFun
run

(2) CODE::BLOCKS是一款(图形开发套件),其底层(需要)arm-linux-gcc 开发套件的支撑。

发布了170 篇原创文章 · 获赞 47 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43734095/article/details/105092992