linux学习之C语言(3)------ gdb
来源:互联网 发布:云计算的就业方向 编辑:程序博客网 时间:2024/06/05 06:08
调试程序要用到gdb这个调试工具,GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
那么该如何使用gdb 这个强大的调试工具来调试自己的程序呢?
首先,在编译时需要加上-g或-ggdb选项。
接着,使用格式 gdb fileName 来调用gdb 或直接在终端输入gdb来进入调试模式。
最后,利用gdb调试选项,进行一系列的操作,直到满足你的要求,找到程序中的错误,了解程序的执行过程。
当然了,gdb调试选项有很多,下面罗列一些比较常用的。
gdb 常用命令:
file ------ 装入想要调试的可执行文件
run ------ 执行当前被调试的程序
kill ------ 终止正在调试的程序
step ------ 执行一行源代码并进入函数内部
next ------ 执行一行源代码但不进入函数内部
break ------在代码里设置断点,这将使得程序在执行到这里时被挂起
print --------打印表达式或变量的值,或打印内存中某个变量开始的一段连续区域的值,还可以用来对变量进行赋值。
display -----设置自动显示的表达式或变量,当程序停止或在单步跟踪时,这些变量会自动显示其当前值 。
list----------- 列出产生执行文件的源代码的一部分
quit ----------退出gdb
watch --------使你能监视一个变量的值而不管它何时被改变
backtrace---- 回溯跟踪
frame n ----- 定位到发生错误的代码段, n为backtrace命令的输出结果中的行号
examine ----- 查看内存地址中的值
jump ---------- 使程序跳转执行
signal -------- 产生信号量
return -------- 强制函数返回
call ------------ 强制调用函数
make ---------- 使用记不退出gdb就可以重新产生可执行文件
shell ----------- 使用户不离开gdb就可以执行shell命令。
下面对上面的命令中一些重要的命令,给出具体的用法
break 命令用法:
break <function> 在进入指定函数时停住
break <linenum> 在指定行号停住
break +offset 在当前行的前面offset行停住
break -offset 在当前行的后面offset行停住
break filename:linenum 在指定文件的的指定行停住
break filename:function 在指定文件的指定函数处停住
break *address 在程序运行内存中指定地址处停住
break 在下条命令处停住
break if <condition> 在条件成立时停止
display相关gdb命令:
undisplay <dnums> 删除自动显示
delete display <dnums> 删除自动显示
disable display <dnums> 不删除自动显示,只是让其失效
enable display <dnums> 不删除自动显示,只是让其恢复
info display 查看display设置自动显示的信息
查看源程序:
list <listnum> 列出指定行周围的源程序
list <function> 列出指定函数的源程序
list 列出当前行前后的源程序
liset - 列出当前行前面的源程序
list + 列出当前行后面的源程序
set listsize <count> 设置一次显示源代码的行数
show listsize 查看当前的listsize 设置
list <first>,<last> 查看指定的first行到last行的源程序
这些命令很多,用户也很灵活,当然,不可能都记住,其实这些命令不用记,在用得时候可以看gdb的帮助文档。
注意事项:
1. 上述大多数命令可以使用简写,如break 只接输入b即可,又如,run 直接输入r即可。
2. 如果希望从断点处继续执行程序,输入c即可
3. 如果希望运行到函数结束,输入finish
4. 查看堆栈信息,输入bt
5. 查看么存,输入 x/64xh+内存地址
6. 删除断点,delete break+断点序号
7 修改指定内存值:print + * 地址 =数值
8 查看汇编代码:disassemble+函数名
对于这么多的命令,用到时查一下即可。
- linux学习之C语言(3)------ gdb
- 用gdb来学习c语言(linux环境下)
- 用gdb来学习c语言(linux环境下)
- linux c之gdb
- Linux之gdb学习
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- 【转】linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- Linux下C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- linux下的C语言开发(gdb调试)
- Linux学习之gdb调试
- uva 507
- 进程与线程的联系与区别
- 【POJ】Buy Tickets(思路 + 线段树)
- 余弦相似度
- 计算机面试、笔试常考题
- linux学习之C语言(3)------ gdb
- 中断处理
- UVA 270 - Lining Up
- HDU 5014 Number Sequence
- 【Android·GoogleMap】Google Maps API V2 的显示
- 数据结构和算法系列 - 单链表
- 环境搭建:cocos2d-x3.2+vs2012-ult-u4+ndk-r9+sdk-17+ant-1.9.4+python-2.7.8+eclipse-4.2+adt-22.0.1
- python 使用笔记
- Linux文件管理-目录处理