Ubuntu GDB调试
来源:互联网 发布:国家化妆品备案网数据 编辑:程序博客网 时间:2024/06/05 00:47
1.什么是GDB
对于程序员来说,最经常遇到的问题就是程序中的各种bug。因此我们需要一款自己喜欢并且功能强大的编译调试器,来调试并修正程序中的bug。
虽然Windows中有很多功能强大,界面美观的IDE(集成开发环境),比如微软公司的Visual c++和Visual statio 系列,都可以用来开发调试c语言或者c++程序,但是在linux中类似的编译器就比较少,比如比较熟知的Codeblocks,是一个跨平台的编译器,既可以在Windows中使用,也可以在linux中使用。
然而,在linux中还有一个更受大家欢迎的调试工具:GDB。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。可以用来调试C,C++程序。
2.GDB功能及其对应命令
GDB功能强大,调试命令也有很多,但是对于普通程序调试中经常使用的命令并不多,如下表所示:
命令形式
功能解释
示例(gdb)
gdb
进入gdb调试
gdb
help
显示帮助信息
help
quit
退出GDB调试
q(quit)
file <filename>
加载被调试的可执行程序文件(文件是经过编译之后形成的可执行文件,在编译时,应该加上-g 选项,比如 gcc -o test_gdb test_dgb.c -g)
file test_gdb
list
列出文件的内容
l (list)
run
运行调试的程序(如果程序中没有设置断点,则程序会一直运行到结束或者出现异常结束,如果设置断点,则会在断点处停止)
r(run)
break <line number>
break <line number> if condition
break <function name>
在某一行设置普通断点。
(运行到该行即停止)
在某一行设置条件断点
(运行到改行满足条件停止)
在某一个函数调用处设置断点
(运行到函数调用处即停止)
b(break) 24
b 24 if index == 3
b getSum
delete <break number>
删除断点编号对应的断点
d(delete) 1
clear
清空所有的断点信息
clear
continue
继续执行程序直到下一个断点或者程序结束
c(continue)
next
单步调试
n(next)
step
遇到函数调用时,进入函数内部调试
s(step)
print <value>
显示变量的值
p(print) index
info <>
用来显示各类信息,详细请查看“help info”
i(info) break
3.举例说明
例子程序如下所示:
#include <stdio.h>int getSum(int num1,int num2);int main(int argc, char *argv[]){int num1 = 20;int num2 = 30;int sum = 0;num1 = num1 - 10;sum = getSum(num1,num2);printf("The sum is %d\n", sum);return 1;}int getSum(int num1,int num2){printf("The numbers are %d and %d\n", num1,num2);return (num1 + num2);}
第一步:
对源程序进行编译,加上-g选项,使其可以进行调试。其结果是生成可执行文件test_gdb,并且可以对其进行gdb调试(对于该命令的详细解释,可以查看gcc命令)
第二步:
进入gdb调试:
如上图最后一行所示,代表进入gdb调试,等待用户命令输入。
第三步:
加载进行调试的可执行文件,方便进行调试,以及源程序的显示。命令如下:
显示加载成功。
第四步:
(1)如果在设置断点之前,输入r
程序正常运行,打印输出结果,并正常退出。
(1)在运行之前,设置断点,为了确定设置断点的位置(行号)可以使用list(l)命令,显示出程序的内容,从而方便的设置断点
(2)设置断点
第一个断点设置在main函数的入口处,第二,三个断点为普通断点,第四个断点设置在函数调用的入口处,第5个断点为条件断点。
(3)开始调试运行
输入r开始运行,在第一个断点处(即main函数入口)停止运行。
此时打印输出num1的值,显示的并不是20,而是一个随机值,因为此时还没有完成初始化操作,如下所示:
输入n执行下一步,此时再次打印输出num1,即可完成初始化。
输入c,执行到第二个断点处停止运行。如下图所示
当程序执行到getSum函数的调用处时,执行s,进入到getSum函数内部,继续调试执行
一直进行单步调试,直到函数结束运行,退出函数的调用
在getSum函数结束之前以及结束之后分别打印输出sum值:
很明显,函数getSum完成计算num1与num2的和之后并对sum赋值。
最后程序结束运行
以上内容虽然是原创,但是参考了http://blog.csdn.net/liigo/article/details/582231中的博客格式以及部分
- GDB调试程序-Ubuntu
- Ubuntu GDB调试
- GDB调试-ubuntu
- Ubuntu-gdb调试
- ubuntu gdb 多线程调试步骤
- ubuntu下gdb代码调试
- Ubuntu中gdb调试步骤
- 用GDB调试程序 - Ubuntu中文
- 用GDB调试程序 - Ubuntu中文
- 用GDB调试程序 - Ubuntu中文
- Linux-Ubuntu下gdb调试笔记
- linux-ubuntu下gdb调试技巧
- 用GDB调试程序 - Ubuntu中文
- Linux(Ubuntu)下嵌入式gdb调试环境
- ubuntu 12.04 GDB调试常用指令
- Ubuntu下GDB调试C语言程序
- ubuntu gdb调试第一次实验总结
- GDB调试
- dp(dip) sp px dpi 区别
- 安卓程序员所需要的url是什么东西
- Android中xml 解析三种方式的区别
- wamp中的Apache开启gzip压缩提高网站的响应速度
- java 手机验证码功能
- Ubuntu GDB调试
- iOS 开发中几种多线程方案
- 正确使用UDP广播(C++代码)
- 大数据向乘的一种实现算法
- 异步框架asyn4j的原理
- spring struts hibernate 的作用
- ubuntu root 或者 普通用户 的密码忘了,解决办法
- 关于浏览器之间的上传
- 第二十二天 启动Activity和Intent