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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:gcc总结
下一篇:简单I/O 与数据表示

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月19日 21时38分10秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【面试篇】Java中String、StringBuilder与StringBuffer的区别? 2019-04-26
【面试篇】Java对象的hashCode()相同,equals()一定为true吗? 2019-04-26
【面试篇】Java中static和final关键字的作用是什么? 2019-04-26
【面试篇】Java中接口和抽象类的区别是什么? 2019-04-26
【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流 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
【Java网络编程与IO流】SpringBoot + WebSocket + Netty实现实时的服务器消息推送 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