龙空技术网

我们一起学习GDB初级

懒羊羊是程序猿 103

前言:

目前朋友们对“ubuntu怎么退出gdb”都比较注意,各位老铁们都需要学习一些“ubuntu怎么退出gdb”的相关资讯。那么小编在网络上收集了一些对于“ubuntu怎么退出gdb””的相关文章,希望大家能喜欢,我们一起来了解一下吧!

最近公司来了几个实习生,给他们培训时发现他们大部分没用过或不了解GDB,给他们培训之余做了这个总结,跟大家共享一下.

GDB简介

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的。幸好,linux下调试还是很方便的。大多数人使用的IDE都集成了调试器,但 linux 最著名的调试器是命令行形式的C/C++调试器GDB。然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握。这里,我们一起学习GDB的基本情况及使用方法。

GDB 安装

Debian 或 Ubuntu

1. $ sudo apt-get install gdb

Arch Linux

1. $ sudo pacman -S gdb

Fedora,CentOS 或 RHEL:

1. $sudo yum install gdb

如果在仓库中找不到的话,可以从官网中下载。

示例代码GDB简单使用

首先最重要的,你需要使用编译器的 “-g“选项来编译程序,这样可执行程序才能通过GDB来运行。

通过下列语句开始调试:

1.交互式窗:

gdb -tui [可执行程序名]

使用”-tui“选项可以将代码显示在一个漂亮的交互式窗口内(所以被称为“文本用户界面 TUI”),在这个窗口内可以使用光标来操控,同时在下面的GDB shell中输入命令。

2.忘记命令

比如只记得是b开头命令,敲入b按两次TAB键,你会看到所有b打头的命令:

 (gdb) b backtrace break bt

不记得命令了:

-h --列出所有命令类

-help <classname> --列出该类下的所有命令

3.设置断点:

 行断点:break [行号] 函数断点:break [函数名] 条件断点:break[行号] if [条件]

当for循环50次时程序停留在a++上,这样我们就可以避免手动执行50次.

tip1

只记得函数的前缀,可以这样:列出所有make_开头的函数

(gdb) b make_ <按TAB键>

tip2

调试C++的程序时,有可以函数名一样。如:

(gdb) b 'bubble( M-?

bubble(double,double) bubble(int,int)

(gdb) b 'bubble(

你可以查看到C++中的所有的重载函数及参数。(注:M-?和“按两次TAB键”是一个意思)

4.查看断点信息

info break 

5.观察断点:

watch [变量]

我们可以设置一个“观察断点”,当这个被观察的变量发生变化时,程序会被停止。

先在第7行设置断点,r运行程序,watch c观察变量c(注意一定要在程序运行后才能watch变量),continue继续执行 会停在变量c值变化的下一行:

打印变量c的值发现已经变化

6.显示变量值:

p [变量]

7.显示所有的局部变量:

info local

8.显示变量的类型:

ptype [变量]

9.单步调试:

step:缩写s

单步调试可以进入函数体

10.运行下一条语句:

next

程序继续执行:

continue:缩写c

执行到程序结束.

11.回溯功能:

bt

回溯功能(backtrace)可以让我们知道程序如何到达这条语句的(这里程序比较简单体现不明显), 查看函数堆栈

12.删除断点:

测试结束,删除断点:

delete [断点号]

13.退出gdb

quit:简写q

下篇文章中我们会做一些GDB进阶阶段的学习,欢迎关注。

标签: #ubuntu怎么退出gdb