Linux系统之下的基本gdb调试
来源:互联网 发布:金融电子化公司 知乎 编辑:程序博客网 时间:2024/04/29 13:05
一、调试的工具: gdb
二、调试的对象: 可执行程序,而不是.c文件,调试的对象一定是一个进程。调试时,程序必须带有调试信息,所以在编译链接的过程中,需要加上参数“-g”。
三、调试的命令:
l 显示代码
回车 继续执行上一操作
b + 行号 加断点
info + b(break) 查看断点信息
r 运行程序
n 下一步,单步执行
p + 变量名 打印变量的值(p + &变量名 打印变量的地址)
q 退出调试
display + 变量名 持续打印
c 继续执行
delete + 断电编号 删除断点
s 进入函数
finish 跳出函数
bt 函数调用栈关系(在被调用函数里看能看见自己和调用函数,在调用函数里只能看见自己)
四、实例
1.先编写一个简单的c语言程序——main.c。
内容见下:
像下面的“gcc -o main main.c”,是无法生成有调试信息的main的,因此无法进行调试。
加上参数“-g”,才可以进行调试。
2.正式开始调试:
打印全部的代码
下断点、查看断点信息
运行程序
下一步,查看变量i、arr[i]的值
持续显示变量i、arr[i]的值
继续执行
删除断点
注意删除断点的信息是断点的编号,我先把开始设的断点1号、2号删除了,再新增了两个断点——3号和4号,所以这时候再删除1号断点是不能成功的。
对于后续的调试操作——进入函数、跳出函数和查看函数调用栈关系,我增加了add.c和max.c,再进行新的调试,所有的文件如下:
add.h
max.h
add.c
max.c
main.c
首先,将这些程序进行编译、链接,有两种在程序中加入调试信息的方法。
方法一:在add.c、max.c的编译过程中加入调试信息
方法二:在三个程序的编译链接过程中加入调试信息
开始调试:
在调用add()、max()处下断点
进入add(),并且查看函数调用栈关系
退出add(),查看函数调用栈关系
对比上面两张图,可以看到在main里看bt和在add中看bt的差别。同理,在max中能够看到max和main的调用信息,如果max中又调用了另一个函数,则在这个函数中查看bt的话,就能看到三个函数了。
以上,就是比较简单的gdb调试过程,如果想要了解更多关于gdb调试的知识,可以去看看《gdb完全用户手册》,谢谢您的观看。
- Linux系统之下的基本gdb调试
- Linux系统GDB调试
- 嵌入式Linux系统的GDB调试
- Linux系统下——GDB调试工具基本命令
- linux gdb调试基本命令
- Linux系统之GDB调试
- gdb调试linux系统调用
- Linux Gdb调试笔记--最基本的3个步骤
- linux下对gdb调试器的基本了解
- linux之下的更新系统时间
- 嵌入式Linux系统的GDB远程调试的实现
- 嵌入式Linux系统的GDB远程调试的实现
- 嵌入式Linux系统的GDB远程调试的实现
- 嵌入式Linux系统的GDB远程调试实践
- 嵌入式Linux系统的GDB远程调试实践
- 嵌入式Linux系统的GDB远程调试实践(转)
- Linux内核之GDB基本调试方法
- 【Linux】gdb调试程序基本用法
- Combinatorics——HDUOJ 1027
- aix中如何缩小默认的交换空间
- 095: 复习习题 求导题型 Case1:显函数求导;Case2:隐函数求导;Case3:参数方程确定的函数
- 最短路径算法 -Dijkstra算法
- SPOJTime Limit Exceeded 高维前缀和优化+ dp
- Linux系统之下的基本gdb调试
- 如何安装Lavarel How to install Lavarel?
- C6748定时器64位模式
- ReactJS初学
- 1115. Counting Nodes in a BST (30)
- 0001 Maximum Subsequence Sum
- hdu5115(区间dp)
- Java:多态 之 向下转型+Instanceof关键字
- mysql Innodb和mvcc