Linux调试器-gdb使用

本文介绍了程序的发布模式、如何在Linux下使用GCC编译器生成包含调试信息的二进制文件,并详细讲解了GDB调试器的基本命令,包括设置断点、查看变量、执行控制等,以及如何在C语言项目中配合Makefile进行调试。
摘要由CSDN通过智能技术生成

1. 背景

●  程序的发布方式有两种,debug模式和release模式

●  Linux gcc/g++出来的二进制程序,默认是release模式

●  要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项(生成debug信息)

●  介绍一下readelf -S,可以读取一个可执行程序的二进制构

●  下载命令:yum install -y gdb

●   查看gdb版本 : gdb --version

2. 介绍调试命令

gdb binFile 退出: ctrl + d quit 调试命令:

●  gdb 文件:进入调试环境·

●  list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
●  list/l 函数名:列出某个函数的源代码。

●  r或run:运行程序。

●  n 或 next:单条执行。

●  s或step:进入函数调用,可以在函数进行逐语句的调试

●  break(b) 行号:在某一行设置断点

●  info break :查看断点信息。 

●  print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

●  p 变量:打印变量值。p &i:查看变量的地址

●  set var:修改变量的值

●  continue(或c):从当前位置开始连续而非单步执行程序
●  run(或r):从开始连续而非单步执行程序

●  delete breakpoints:删除所有断点

●  d n(delete breakpoints n):删除序号为n的断点

●  disable breakpoints:禁用断点

●  enable breakpoints:启用断点

●  info(或i) breakpoints:参看当前设置了哪些断点

●  display 变量名:跟踪查看一个变量,每次停下来都显示它的值

●  undisplay:取消对先前设置的那些变量的跟踪

●  until X行号:跳至X行

●  finish:执行到当前函数返回,然后挺下来等待命令

●  breaktrace(或bt):查看各级函数调用及参数

●  info(i) locals:查看当前栈帧局部变量的值

●  c :下一个断点

●  quit:退出gdb,历史命令会消失

3. 理解

●  和windows IDE对应例子

4.开始使用

使用环境

//makefile

mycode:mycode.c
gcc -o $@ $^ -g
.PHONY:clean
clean:
rm -f mycode

//mycode.c

 
 

#include <stdio.h>

void Print3()

{

        printf("hello printf1\n");

}

void Print2()

{

        printf("hello printf1\n");

        Print3();

}

void Print1()

{

        printf("hello printf1\n");

        Print2();

}

int addToTop(int top)

{

        int res = 0;

        int i = 1;

        for(; i <= top; i++)

        {

                res += i;

        }

        Print1();

        return res;

}

int main()

{

        printf("debug begin\n");

        int top = 100;

        int sum = addToTop(top);

        printf("sum: %d\n", sum);

        printf("debug end\n");

        return 0;

}

readelf -S

查看二进制文件代码

list 行号的使用

一般情况下以行号为中间行输出,特殊情况下如行号靠近开头或结尾。

list (l)  0 后回车

可以打印所有代码

设置断点和打印断点信息

删除段点 d + 断点编号/ d 删除所有断点

(退出调试,断点信息全部消失)

设置断点后,r+回车,运行时会在断点处停止

n(next):逐过程,把函数直接当成语句,直接运行函数

s(step):逐语句,会进入函数,不跳过代码块

显示变量

长显示变量和取消长显示

限定代码出错的上下文

until 行号:

快速运行到指定行

finish

不小心进入函数时,结束函数,返回结果,可以用于测试函数。

c(continue)

直接运行到下一个断点

disable n 和 enable n

关闭断点和开启断点

set var设置变量

bt:查看各级函数调用及参数

info locals:查看当前栈帧局部变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值