Linux下GDB常用命令总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18108083/article/details/85394617

一、GDB概述

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

二、准备工作

(a) 安装GDB: apt install gdb

(b) 创建main.cpp文件

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

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

 

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

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

(1) 编译成debug版

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

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

执行 gdb main


【查看代码】 

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


【控制程序运行】 

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

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

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

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

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

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

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

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

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

 


【打印和设置内存变量】 

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

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

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


【查看程序调用栈】 

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

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

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


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

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

猜你喜欢

转载自blog.csdn.net/qq_18108083/article/details/85394617