GCC编译运行
touch filename.c
在当前文件夹创建程序文件
gcc fileName.c -o binFileName.out
在当前文件夹编译生成可执行文件,可执行文件名的后缀可以省略
./binFileName
运行编译后的可执行程序
如果直接gcc filename.c
会生成一个可执行文件a.out
,执行./a.out
即可运行
如果想用调试器执行一个可执行文件, 在用gcc编译时必须加上-g选项:gcc -g filename.c -o filename.out
加上-g选项以后,gcc在编译是会做以下额外的操作:
-
创建符号表,符号表包含了程序中使用的变量名称的列表。
-
关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行。
GDB调试
gcc -g filename.c -o filename.out
编译
gdb ./filename.out
开始调试
q
退出gdb
b main
在main函数开头设置断点
b filePath/filename.c:n
通过文件路径设置断点,n表示断点设置在代码的第n行
r
开始执行,程序停在第一个断点之前
n
单步执行,不进入函数体
s
单步执行,会进入函数体
k
结束调试
c
程序运行至下一个断点之前
info b
查看所有断点
d number1 number2...
删除断点,number是断点的序号,可以一次性删除多个断点
bt
查看函数调用栈
watch variable
监视变量,一旦变量的值发生改变就中断进程
info r
查看所有寄存器的值
⭐️p variable
调试中查看变量的值,若在p后面加上/x
,显示的值为16进制
layout src/tui enable
在终端显示源代码,方便调试(方向键控制查看代码),通过tui disable/tui enable
可以关闭或打开该代码显示
layout asm/tui reg
在终端查看该程序的汇编代码,通过
si单步跳转(相当于于源代码程序调试中的
n` )
语法糖:不输入指令,直接按回车,则执行的是上一次输入的命令
gdbinit(gdb命令脚本)
使用方法
-
(方法一)gdb在启动的时候,会在当前目录下查找".gdbinit"这个文件,并把它的内容作为gdb命令进行解释,因此可以提前写好命令,放入当前目录中命名为".gdbinit"。
-
(方法二)在gdb运行过程中,可以使用 source script-file 来解释gdb命令脚本script-file