gdb调试c程序

GDB是GNU开源组织发布的一个强大的UNIX/LINUX下的程序调试工具,因为很多优秀的应用都是C开发的,如:mysql、redis、php等,掌握gdb对了解这些应用和学习更是如虎添翼

gdb基本命令

命令(缩写) 功 能
run(r) 启动或者重启一个程序。
list(l) 显示带有行号的源码。
continue(c) 让暂停的程序继续运行。
next(n) 单步调试程序,即手动控制代码一行一行地执行。
step(s) 如果有调用函数,进入调用的函数内部;否则,和 next 命令的功能一样。
until(u)
until location(u location)
当你厌倦了在一个循环体内单步跟踪时,单纯使用 until 命令,可以运行程序直到退出循环体。
until n 命令中,n 为某一行代码的行号,该命令会使程序运行至第 n 行代码处停止。
finish(fi) 结束当前正在执行的函数,并在跳出函数后暂停程序的执行。
return(return) 结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。
jump(j) 使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。
print(p) 打印指定变量的值。
quit(q) 退出 GDB 调试器。
display(disp) 跟踪查看某个变量,每次停下来都显示它的值
watch 监视变量值的变化
delete 输入命令delete, 再加上断点编号,可以删除对应编号的断点
clear 输入命令clear, 再加上行号,可以删除对应行号的断点
disable 输入命令disable, 再加上断点编号,可以禁用该断点

准备一段c程序

#include <stdio.h>
int print(int num){
    int ret = num * num;
    return ret;
}
int myfunc(int num){
    int i = 1;
    int sum = 0;
    while(i <= num){
        sum += print(i);
        i++;
    }
    return sum;
}
int main(){
    int num =0;
    scanf("%d", &num);
    int result = myfunc(num);
    printf("%d", result);
    return 0;
}

编译成能gdb调试的可执行文件

gcc -g -o main.out main.c

-g 参数表示可用于gdb调试

开始gdb调试

 

gdb  main.out  #运行编译好的c程序

list    #查看代码

break  8   #在程序第8行打断点

info  breakpoints    #查看断点信息

run  # 打完断点后可使用run 重新运行程序

12  #是程序中接收的输入, 与gdb 调试无关

n   #next  下一步,如果是下一步是方法,不进入方法内

s   #step  下一步,如果下一步是方法,进入方法内

finish  #跳出当前运行的方法,并在跳出方法后暂停程序的执行

c   #continue ,继续运行至下一个断点或程序末尾

问题汇总:

Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64

# vim /etc/yum.repos.d/CentOS-Debuginfo.repo

enable=1

yum install glibc
debuginfo-install glibc-2.17-222.el7.x86_64

 

GDB详细教程

posted @ 2020-08-27 17:32  .追风逐月  阅读(368)  评论(0编辑  收藏  举报