博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gdb调试程序
阅读量:6465 次
发布时间:2019-06-23

本文共 2027 字,大约阅读时间需要 6 分钟。

编写test2.c

 

 

 

 

 

 

 

 

 

 

编译成可执行文件

gcc test2.c -g -o test2
gdb test2

进入gdb调试

run命令

run命令格式

run 

其中run可以简写成r,gdb中大部分指令可以简写。

在gdb中执行

run lvyahui blog

可以看到输出

再次运行run可以不需要再传递参数,它会使用最后一次调用run命令传递的参数

可以看到默认参数

可以再次执行带参数的run或者使用set agrs 修改默认参数

断点

设置断点

break 

可以在vim编辑器中查看行号或者通过list/l指令查看行号

编辑代码文件test1.c

编译好test1

gcc test1.c -g -o test1
gdb test1

进入gdb环境

先查看代码,然后设置一个断点,再run执行,让后continue继续执行

在方法前添加断点

break可以直接在方法前添加短点

break fun_name

在此调试执行

删除断点

下面看怎么删除之前设置的短点

delete breakpoint 
#删除指定断点#或者delete breakpoints #删除所有断点

其中 delete可以简写成d

另外clear命令也可以用来清除断点

按表达式设置断点

break 
if expression

按照上面的方法步骤设置断点,发现失败了,提示No symbol var in current context

起初我以为是这样的设置需要在运行中设置,于是在13行设置断点,运行,当停在13行时,再在第15行设置一个条件断点,但

最后发现问题依旧。显然问题不在这里,后来上网查了下,在编译时加上一个-gstabs+选项

gcc -g -gstabs+ -c test1.cgcc test1.o -o test1

再次进入gdb 调试

发现就可以设置这个条件断点了

可以使用readelf看两次不同方法编译生成的.o文件的符号表有所不同。

run执行下看看

但是执行发现断点没有起作用

虽然不知道为什么,但显然之前是因为编译器做了编译优化,但我明明没有加任何-OX选项啊。后来把i==50换成i>=50,发现可以停下来了。

真是郁闷,i怎么会是这个值呢?

如果是多文件程序,break还可以指定文件添加断点,格式如下

break 
break
#例如break test1.c:15break test1.c:main

禁止和启用断点

格式

disable/enable breakpoint num

观察点

观察点也可以起到断点的作用

编辑test3.c文件

#include 
int sum(int a){ int i,res = 0; for(i=0;i < a;i++){ res += i; } return res;}int main(void){ int a = 10; int asum = sum(a); printf("asum is %d \n",asum); return 0;}

编译

gcc -g -gstabs+ -Wall test3.c -o test3

watch 命令需要在运行程序后使用看,所以我们要先加一个断点让程序停下来

将断点删除,继续执行

查看运行数据

在运行时常常使用print命令来查看数据,再次之前,需要先知道如何单步执行,进入函数,运行到下一个断点

  • next--执行一行源代码但不进入函数内部。
  • step--执行一行源代码而且进入函数内部。
  • continue -- 执行到下一暂停点或程序结束。

再次调试test1程序

print的格式

print 
#或者p

其中expression可以是各种形式

表达式

p (i-6)*3+result

函数调用

p func(5)

数组

p *arr_name@arr_length

编写test4.c

#include 
#include
int main(void){ int arr[] = {
1,2,3,4,5}; int len = 4,i; int * arr2 = (int *) malloc(len * sizeof(int)); for(i=0;i

进入gdb调试

自动显示变量

display/fmt expr

控制格式的字符更printf的非常相似,在此不做赘述

以上是个人总结的gdb的一些基础内容,更多内容会在后续博客中提及

转载地址:http://zsezo.baihongyu.com/

你可能感兴趣的文章
WordPress 前端投稿/编辑发表文章插件 DJD Site Post(支持游客和已注册用户)汉化版 免费下载...
查看>>
C# 自定义事件整理项目 - EventDemo
查看>>
面象过程与面象对象
查看>>
用CSS实现图片水印效果代码
查看>>
谷歌设置支持webgl
查看>>
P3402 【模板】可持久化并查集
查看>>
js的AJAX请求有关知识总结
查看>>
Eclipse添加新server时无法选择Tomcat7的问题
查看>>
L207
查看>>
nginx 配置https 负载均衡
查看>>
双拓扑排序 HDOJ 5098 Smart Software Installer
查看>>
三分 POJ 2420 A Star not a Tree?
查看>>
36.Node.js 工具模块--OS模块系统操作
查看>>
存储过程报错行提示
查看>>
第一篇markdown博文
查看>>
Leetcode 4 - median-of-two-sorted-arrays
查看>>
ERDAS软件应用(四)遥感影像数据增强
查看>>
修改OBS为仅直播音频
查看>>
完整版:《开源框架实战宝典电子书V1.0.0》内测版下载地址!
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>