一、交叉编译GDB
1、源码下载
下载:点击跳转
2、编译
../configure --prefix=$PWD --host=aarch64-sdrv-linux --target=aarch64-sdrv-linux
make -j18
make install
二、GDB的基本命令
三、GDB的简单使用
1、编译hello.c
gcc -g test.c -o test
注意:编译的时候尽量加上 -g 选项,使之加入符号表,否贼调试的时候看不到程序的源代码。
以test.c为例:
2、启动GDB
gdb test
3、打断点
也就是程序运行到哪,我们以main函数为例
b main
也可以指定在哪一行下断点。
info breakpoints //查看断点
4、运行程序
r //让程序运行起来
5、往下运行
" n " :执行一条语句,碰到函数会直接运行函数
" s " :执行下一条语句,碰到函数会进入到函数中
6、查看运行中程序的变量
p [变量名]
7、设置程序输入参数
启动gdb之后输入:
set args 参数1 参数2 //参数之间用空格隔开
8、GDB多进程调试
set follow-fork-mode parent //进入父进程
set follow-fork-mode child //进入子进程
9、GDB多线程调试
线程比较简单 想看哪个线程就把断点下到哪个线程的函数上
b 线程函数名
三、段错误调试
以下面代码为例:
编译运行,很明显会出现段错误,因为对NULL进行了解引用:
然后执行以下命令,再执行固件,会发现多了一个core文件:
ulimit -c 10240 //10240的位置可以是任意一个比较大的数字
最后执行下面命令,gdb会告诉我们问题出在哪个函数哪一行:
gdb test core
qq群交流:698593923
觉得有帮助的话,打赏一下呗。。