GDB基础调试万字教程:帶你一起深入淺出GDB調試(建议搜藏)
Posted 鸿渐之翼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB基础调试万字教程:帶你一起深入淺出GDB調試(建议搜藏)相关的知识,希望对你有一定的参考价值。
博主:鴻漸之翼
个人介绍:男,搞底層的FW,喜歡發一點沒用的東西。
前言:
介紹部分純屬節目效果勿噴
本篇文章將簡單介紹GDB、GDB使用方法,與GDB挿件使用方法。
感謝臺灣科技大學NTUSTISC
GDB ???
GDB常用指令
b(break point)
c (continue)
ni (next)直接运行下一条指令
si (continue to function)逐步运行指令,遇见函数有限运行函数里的
GDB demo
gdb file
b *main 在main()函数位置打下断点
disas main查看main函数的反汇编指令
x/8g 看stack 8byte的空间
x/s 看字符串
x/1xg 0x000055555555551b0
x/8xg
基础命令:
我们通过一个demo来简单说明下GDB调试流程
开始调试:
gdb test
然后查看main的汇编
disas main
如果我们要查看main,就下一个break pointer在main
b *main 或者 b main
现在你掌握了最基本的gdb调试技巧,我们通过一个实例进行调试程序如下
#include <stdio.h>
int func()
{
int i=0; int j=0;
for(i=0;i<10;i++)
{
j+=2;
printf("i=%d\\n",i);
printf("j=%d\\n",j);
}
return 0;
}
int main()
{
int i=1;
i = i + 1;
printf("func= %s, line= %d,i= %d\\n",__FUNCTION__,__LINE__,i);
func();
i++;
printf("func= %s,;line= %d,i= %d\\n",__FUNCTION__,__LINE__,i);
return 0;
}
使用gcc命令编译生成可执行文件
gdb_test名字是自定义的可以更改
gcc gdb.c -g -o gdb_test
现在你已经学会最简单的编译程序技巧。
接下来有两种使用gdb调试的方式。
第一种方式是“gdb+可执行程序”
第二种方式是“进入gdb再使用file命令载入文件”
你可以选在自己喜欢的方式进行尝试
目前为止你已经学会了如何载入程序,下面是调试环节
首先需要我们在gdb中运行程序,使用run命令把程序以GDB形式运行。
(1)输入run命令
(2)查看源码:list+function list+行数
(3)查看函数反汇编:disassemble+函数名
使用c退出
(5)程序断点相关操作
5.1程序行断点
b gdb.c:3
5.2函数断点
b gdb.c:func
5.3条件表达式断点
break 18 if i===2
如果想让程序继续执行,使用命令c,如果想让程序进入调用函数内部,使用s,如果想退出程序使用命令q。
(6)disable enable delete 断点命令
disable break n:禁用某个断点n
enable break n: 开启某断点n
delete break:删除所有断点
delete break n:删除某个断点
clear 行号:删除某一行断点
clear 函数名:删除该函数断点
info breakpoints:查看系统中设置的所有断点
(7)变量、内存相关的操作
查看内存中变量: p 变量名
查看内存地中中存储的值:
x/<n/f/u> 其中 n、f、u是参数
f表示格式:
x/x :按照十六进制格式显示变量
xd:按照十进制格式显示变量
x/u:按十六进制格式显示无符号整形
x/o:按照八进制格式显示变量
x/t:按照二进制格式显示变量
x/c:按字符格式显示变量
x/f:按浮点数格式显示变量
u参数表示从当前地址往后请求字节数,
b是单字节,h是双字节,w是4字节,g是8字节
例如:
x/2bh 0x1234 从addr 0x1234 以十六机制的方式显示2个单字节的长度。
打印变量值 p i
继续执行 c
由于执行过 i = i+1,所以变量i变成了2
x/2un &i 输出变量i的地址,默认是以16进制输出4字节
x/4uw &i 输出变量i的地址,默认是以10进制输出4个4字节
(8)查看并且修改变量类型与值:
what is <变量名>
set var <变量名>=<新设置的变量值>
以上是关于GDB基础调试万字教程:帶你一起深入淺出GDB調試(建议搜藏)的主要内容,如果未能解决你的问题,请参考以下文章