【嵌入式】Linux开发工具gdb及远程调试
gdb及远程调试gdbgdb安装gdb调试命令gdb 调试步骤嵌入式远程调试在开发板上运行 gdbserver在PC端执行其他Liunx开发工具交叉反汇编器 arm-linux-objdump查看elf文件工具 arm-linux-readelf图形化开发套件:CODE::BLOCKS课后作业gdbGDB, GNU 的调试器称为 gdb(ddd),该程序是一个交互式工具,工作在字符模式。GD...
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 开发套件的支撑。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)