🔥个人主页 :Quitecoder
🔥专栏:linux笔记仓
目录
01.gdb使用
- 程序的发布方式有两种,debug模式和release模式
- Linux gcc/g++出来的二进制程序,默认是release模式
- 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
release版本不可被调试,debug版本可以,原因是,debug版本下编译器形成可执行程序的时候会给可执行程序添加调试信息
bash
1 myprocess-debug: myprocess.c
2 gcc -std=c99 -o $@ $^ -g
3
4 .PHONY: clean
5 clean:
6 rm -f myprocess-debug
bash
readelf -S myprocess-debug
readelf 是一个用来显示 ELF(Executable and Linkable Format)文件信息的工具。-S 选项用于显示 ELF 文件的节头部信息(section headers)。通过这个命令,你可以查看包含在 ELF 文件中的不同节(section),这些节可能包括代码段、数据段、符号表、字符串表等
c
#include<stdio.h>
int AddToTarget(int a,int b)
{
int sum=0;
for(int i=a;i<=b;i++)
{
sum+=i;
}
return sum;
}
int main()
{
printf("run begin...\n");
int result=0;
result=AddToTarget(1,100);
printf("result:%d\n",result);
printf("run end...\n");
return 0;
}
gdb binFile
退出: ctrl + d
或 quit
调试命令:
- list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l: l文件名:行号/函数名,I行号/函数名
list/l 函数名:列出某个函数的源代码。
-
r或run:运行程序。
-
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break ( i b ):查看断点信息。
delete(d) breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
-
n 或 next:单条执行。
-
s或step:进入函数调用
-
finish:执行到当前函数返回,然后挺下来等待命令
-
print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay(编号):取消对先前设置的那些变量的跟踪
-
continue(或c):从当前位置开始连续而非单步执行程序(运行到下一个断点)
-
until X行号:跳至X行
-
breaktrace(或bt):查看各级函数调用及参数
-
info(i) locals:查看当前栈帧局部变量的值
-
quit:退出gdb