gbd调试总结
发布日期:2022-02-07 06:39:46
浏览次数:5
分类:技术文章
本文共 1784 字,大约阅读时间需要 5 分钟。
gdb调试
常用基本命令
file 载入待调试文件
run next step breakpoint print大纲
输入控制
运行控制
中断控制 (两种点)
查看代码
查看变量信息 (一种点)
调用函数
查看调用堆栈
输入控制
有时候会遇到段错误
需要调试 但是调试过程中要输入很多数据怎么办? 可以使用重定向! 在开始运行程序的时候(s或r) 重定向输入输出均可(gdb)r < test.in
运行控制
——start(s)
运行直到main函数
——run(r)
运行
——continue(c)
运行直到下一个断电
——finish(f)
用来跳出函数
函数运行玩后自动停止——next(n)
下一条语句
——step(s)
单步调试
进入函数——until
跳出循环
循环结束后自动停止中断控制
断点是程序执行到某行代码是触发,观察点是程序访问某个内存单元时触发
——breakpoint(b)断点
b n
b 函数名 b n(函数名)if 条件——watch 观察点
watch 变量名
当程序访问变量名指定的内存单元时,停止程序查看代码
//输出从上次调用list命令开始往后的10行程序代码 (gdb) list //列出 line1 到 line2 行之间的源代码 (gdb) list line1, line2 //输出第 n 行附近的10行程序代码 (gdb) list n //输出函数function前后的10行程序代码 (gdb) list function
查看变量信息
——print(p) 打印
需要的时候就看一看变量的值
——display(disp)自动显示
一旦程序停止(遇到断电,或者单步进行)
都看一看变量的值——watch 观察点
一旦访问这个变量,就看变量的值(
同时兼顾断点作用)——whatis 查看变量类型
——特别:查看数组的值
查看一段连续的内存空间的值。
比如数组的一段,或是动态分配的数据的大小。 你可以使用GDB的“@”操作符, “@”的左边是第一个内存的地址的值, “@”的右边则你你想查看内存的长度。 例如,你的程序中有这样的语句:int *array = (int *) malloc (len * sizeof (int));
于是,在GDB调试过程中,你可以以如下命令显示出这个动态数组的取值: p *array@len 查看程序信息info
——info args 当前参数
打印出当前函数的参数名及其值。
——info locals 局部变量
打印出当前函数中所有局部变量及其值。
——info break 断点
查看断点信息。
——info watchpoints 观察点
列出当前所设置了的所有观察点。
——info display 自动显示点
——info stack 查看栈中信息
——info frame 更详细的栈层地址信息
调用函数
——call
直接call function(arg…)
就能够查看结果查看栈信息
——backtrace(bt) 查看调用栈
查看函数调用栈
查看其调用函数的信息
——frame 查看栈详细信息
可在后面加入数字n
n为栈的层次,然后可以用其他命令(info)查看此级别的变量信息三种点的管理
——观察点与断点 的管理
断点和观察点在info break中都能看到,编号同时管理
disable num enable num delete num (num是点的编号) disable和enalbe不删除自动显示的设置,而只是让其失效和恢复clear list_insert //删除函数的所有断点
clear list.c:list_delet //删除文件:函数的所有断点 clear 12 //删除行号的所有断点 clear list.c:12 //删除文件:行号的所有断点
——自动显示点
自动显示点在info display 中能看到
disable diaplay <点编号> // 关闭 enable diaplay <点编号> // 打开 delete diaplay <点编号> // 删除特有操作
undisplay <编号> // 删除自动显示点 // 效果等同于delete转载地址:https://blog.csdn.net/wyfwyf12321/article/details/69666929 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月19日 21时38分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【面试篇】Java对象的hashCode()相同,equals()一定为true吗?
2019-04-26
【面试篇】Java中static和final关键字的作用是什么?
2019-04-26
【面试篇】Java中接口和抽象类的区别是什么?
2019-04-26
【Java网络编程与IO流】Java中BIO、NIO、AIO的区别是什么?
2019-04-26
【Leetcode刷题篇】leetcode136 只出现一次的数字
2019-04-26
spring boot整合thymeleaf,支持JSP和HTML页面开发
2019-04-26
【Java网络编程与IO流】Spring boot整合SSE实现服务器实时推送流信息
2019-04-26
【Leetcode刷题篇】leetcode141 环形链表II
2019-04-26
【Leetcode刷题篇】leetcode160 相交链表
2019-04-26
【Leetcode刷题篇】leetcode169 多数元素
2019-04-26
【Leetcode刷题篇】leetcode461 汉明距离
2019-04-26
【Leetcode刷题篇】leetcode204 计数质数
2019-04-26
【Leetcode刷题篇】leetcode70 爬楼梯
2019-04-26
【Leetcode刷题篇】leetcode739 每日温度
2019-04-26
【Leetcode刷题篇】leetcode121买卖股票的最佳时机
2019-04-26
【面试篇】Java多线程并发-Java关键字volatile详解
2019-04-26
【面试篇】Java的代理模式-静态代理和动态代理详解
2019-04-26