【Linux】调试工具 - gdb

目录

一、gdb概述:

二、list(查看源文件代码):

三、run(运行程序):

​四、断点相关操作:

1、查看断点:

2、在指定行设置断点:  

3、在函数入口处设置断点: 

4、删除断点

5、禁用断点 / 启用断点

五、逐过程调试 / 逐语句调试:

1、逐过程调试:

2、逐语句调试:

六、常显示 / 去除常显示 :

1、常显示:

2、去除常显示:

3、打印变量名:

七、跳转至指定行与退出gdb:

1、跳转至指定行:  

2、退出gdb:


一、gdb概述:

  • 程序在发布时会有两种版本:Debug版本和Release版本。
  • Debug版本和Release版本其实就是优化级别的区别
  • Debug称为调试版本,编译的结果通常包含有调试信息,没有做任何优化,方便开发人员进行调试。
  • Release称为发布版本,不会携带调试信息,同时编译器对代码进行了很多优化,使代码更小,速度更快,发布给用户使用,给用户使用以更好的体验。
  • 在我们申请内存时,Debug模式会多申请一部分空间,分布在内存块的前后,用于存放调试信息。
  • 在Release模式下,编译器会对代码进行很多的优化操作,所以Release模式比Debug模式花的时间也会更多

而在Linux下 gcc/g++ 下生成的二进制程序默认是Release版本。要想进行调试操作就得要在源代码生成二进制程序时加上 -g 选项,将其改为Debug模式。

在接下来使用gdb调试时以以下代码为样例进行演示:

#include <stdio.h>

int Sum(int n)
{
	int i = 1, sum = 0;
	for (; i <= n; i++)
	{
		sum += i;
	}
	return sum;
}

int main()
{
	printf("%d\n", Sum(100));
	return 0;
}

二、list(查看源文件代码):

list 指令可以在命令行显示源文件对应的代码,一次显示十行,可以简写成l有两种用法:

1:l 行号  (从对应行号开始在命令行输出源文件代码,一次显示十行)

2:l 函数名   (在命令行中输出对应函数的源代码)

 

三、run(运行程序):

run指令可以直接运行程序,如果程序没有断点则将程序运行到结束

四、断点相关操作:

1、查看断点:

info break(可简写为:i b)查看断点:

 

2、在指定行设置断点:  

break 行号(可简写为:b 行号) 

例如:分别在14、15、16行处打一个断点 

3、在函数入口处设置断点: 

break 函数名(可简写为:b 函数名)

 例如:在函数Sum处打一个断点

4、删除断点

删除指定断点:delete Num(可简写为d Num)Num为断点的序号

删除全部断点:delete break(可简写为d break)

5、禁用断点 / 启用断点

禁用指定断点:disable Num      Num为断点的序号

 

启用指定断点:enable Num       Num为断点的序号

五、逐过程调试 / 逐语句调试:

1、逐过程调试:

step(可以简写为s) 

2、逐语句调试:

next(可以简写为n)

六、常显示 / 去除常显示 :

1、常显示:

display 变量名 / 地址       每次执行语句时都会在命令行中打印常显示变量的值

2、去除常显示:

undisplay 对应的编号

3、打印变量名:

p 变量名        在命令行中打印对应变量的值

七、跳转至指定行与退出gdb:

1、跳转至指定行:  

until 指定行

2、退出gdb:

quit(可简写为q)

相关推荐

  1. [ Linux ]调试工具gdb

    2024-03-16 00:38:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 00:38:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 00:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 00:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 00:38:03       18 阅读

热门阅读

  1. 单个数据盘分区如何配置LVM

    2024-03-16 00:38:03       24 阅读
  2. Hive中的explode函数、posexplode函数与later view函数

    2024-03-16 00:38:03       20 阅读
  3. 专升本 C语言笔记-02 标识符 命名规范 关键字

    2024-03-16 00:38:03       20 阅读
  4. Rust 的 HashMap

    2024-03-16 00:38:03       21 阅读
  5. 2024.3.14每日一题

    2024-03-16 00:38:03       20 阅读
  6. k8s 安全机制详解

    2024-03-16 00:38:03       16 阅读
  7. Solidity Uniswap V2 Router contract addLiquidity

    2024-03-16 00:38:03       19 阅读
  8. ZK vs FHE

    ZK vs FHE

    2024-03-16 00:38:03      17 阅读
  9. tvm android_rpc_test.py执行报错解决

    2024-03-16 00:38:03       17 阅读
  10. 智能网联汽车网络安全威胁具体

    2024-03-16 00:38:03       19 阅读
  11. Nodejs引入模块运行时报错

    2024-03-16 00:38:03       21 阅读