Linux下GDB常用命令总结

一、GDB概述

Linux下的GDB调试器,是一款GNU组织开发的UNIX/Linux下的程序调试工具,它没有图形化的友好界面,但功能强大。

二、准备工作

(a) 安装GDB: apt install gdb

(b) 创建main.cpp文件

Linux下GDB常用命令总结_第1张图片

vim使用技巧:在按esc进入命令模式下,在!后可直接输入命令行进行执行,还可以进行上下键查看历史命令。这样可以在不退出vim的情况下进行编译,从而及早发现问题。 

Linux下GDB常用命令总结_第2张图片

Linux下GDB常用命令总结_第3张图片

三、GDB常用命令及调试实例

Linux下GDB常用命令总结_第4张图片

 

 由于调试程序是个极为频繁的操作,所以GDB的所有命令,只要不出现冲突,都可以进行简写,如list可直接简写为l,break可直接简写为b。

为了方便调试,修改main.cpp如下:

Linux下GDB常用命令总结_第5张图片

(1) 编译成debug版

执行 g++ main.cpp -g -o main (注意若不加- g 选项,则生成的是release版本,使用GDB工具进行调试会提示找不到符号。

 (2) 使用GDB对debug版本的可执行文件进行调试

执行 gdb main

Linux下GDB常用命令总结_第6张图片


【查看代码】 

(1) list<行号> | <函数名>  查看指定行号的代码或者函数(在前面会自动多展示几行)

Linux下GDB常用命令总结_第7张图片

 


【控制程序运行】 

 (2) break 行号 | 函数名<条件表达式>  设置断点

Linux下GDB常用命令总结_第8张图片

 使用 info break ,查看断点信息:

Linux下GDB常用命令总结_第9张图片

 使用 delete (Num) ,删除断点:

Linux下GDB常用命令总结_第10张图片

(3) run 运行函数到断点处或者程序结束

Linux下GDB常用命令总结_第11张图片

(4) next 单步运行一条指令,不进入函数(把整个函数当成一行命令执行)

Linux下GDB常用命令总结_第12张图片

 (5) step 单步运行一条指令,进入函数(真正的单条语句运行)

Linux下GDB常用命令总结_第13张图片

 (6) continue 继续执行,直到遇到新断点或者程序结束

Linux下GDB常用命令总结_第14张图片

(7) watch 变量|表达式  观察变量或者表达式的值,只要其发生变化,则停止。

这个例子不是上述代码,反正比较简单,就是定义个 int i =0; 然后 i++;

Linux下GDB常用命令总结_第15张图片

 


【打印和设置内存变量】 

为测试方便,修改代码如下:

Linux下GDB常用命令总结_第16张图片

(8) print 变量|表达式  查看当前指定变量或表达式的值

Linux下GDB常用命令总结_第17张图片

 (9) set 变量名=新值  设置内存中指定变量的值,若出现不明确,需要加上var指明是程序中的变量

Linux下GDB常用命令总结_第18张图片


【查看程序调用栈】 

为方便测试,修改main.cpp如下:

Linux下GDB常用命令总结_第19张图片

 (10) backtrace 当程序宕掉时,查看程序调用栈

Linux下GDB常用命令总结_第20张图片

所以说GDB是在Linux编程中必须使用的工具, 没有GDB,在出现错误的时候很难想象错误发生在哪里。另外在Linux中也有这样的好处,就是当程序宕掉了基本不会对系统造成影响,而在windows中程序宕掉甚至会使系统产生异常,所以Linux是比较稳定可靠的,适合做服务器。


段错误调试:使用Core Dump查找程序宕掉的原因,可参考如下博客,讲得很详细:

https://www.cnblogs.com/lidabo/p/5014710.html

你可能感兴趣的:(Linux)