当前位置: 首页 > news >正文

GCC及GDB的使用

参考视频及博客

https://www.bilibili.com/video/BV1EK411g7Li/?spm_id_from=333.999.0.0&vd_source=b3723521e243814388688d813c9d475f
https://www.bilibili.com/video/BV1ei4y1V758/?buvid=XU932919AEC08339E30CE57D39A2BABF6A44F&from_spmid=search.search-result.0.0&is_story_h5=false&mid=rSmqqQLB5PQj7nof4wjfpQ%3D%3D&p=5&plat_id=114&share_from=ugc&share_medium=android&share_plat=android&share_session_id=0d47723b-d4d0-430f-9f99-3fbe1750ce7a&share_source=WEIXIN&share_tag=s_i&spmid=united.player-video-detail.0.0&timestamp=1730192395&unique_k=9Cv4b9q&up_id=627875426&share_source=weixin

1.GDB的主要功能

开始并设置参数
打断点,在特殊情况下停止
停止时,发生了什么
GDB可以支持C, C++, Go, Pascal, 汇编语言等

2.安装GDB

安装:yum install gdb
查看版本:gdb -v

在这里插入图片描述在这里插入图片描述

3.调试
调试的方式

gcc -g main.c
gdb ./a.out

程序

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>void func1()
{printf("func1-running\n");
}int main()
{int i;for(i = 0; i < 10; i++){printf("func-main-running-%d\n",i);sleep(1);}func1();return 0;
}

调试
在这里插入图片描述
在这里插入图片描述


命令:
run r 运行
break b 打断点b main //在函数main那一行打断点b 8 //在第8行打断点
list 展示代码
info b   显示断点信息
quit q 退出
next n 下一步
print p 打印  注意这里是print, 不是printf
step  s 进入某个函数

r: 没有设置断点的时候,r会将程序运行完
在这里插入图片描述
list 展示代码
在这里插入图片描述
在这里插入图片描述

b 打断点
在这里插入图片描述
在这里插入图片描述

r 运行程序
在这里插入图片描述

n 下一步
在这里插入图片描述
print
在这里插入图片描述
q 退出
在这里插入图片描述

s 进入某个函数
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.watchpoint
4.1设置GDB中调用shell的命令:
例如:

shell ls

在这里插入图片描述
在这里插入图片描述

4.2日志功能

set logging on #会把output打印到gdb.txt中

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4.3观察某个变量的值

print &point #打印指针point的值
print i  #打印变量i的值watch &point #观察指针point的值,当point发生变化的时候,会打印出来
watch  i  #观察变量i的值,当i的值发生变化时,会打印出来 old value  和new value
按下n进入下一步,按下c进入下一步

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.当程序出现错误的时候,比如指针越界
会产生一个core文件
(假如程序出错的时候,没有产生core文件,就要通过ulimit来设置 ; ulimit -c unlimited)

./a.out #执行文件
出错,产生core
使用: gdb ./a.out core
执行完这一句话之后,会打印出错误的地址。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{int *p = NULL;*p =10;return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
su root之后重新查看
在这里插入图片描述
这里还是没出来core文件,后续再排查为什么

6.调试一个正在运行的进程。

gcc -g test_for.c
./a.out &
上边代码会返回进行的pid
gdb -p pid

http://www.mrgr.cn/news/61483.html

相关文章:

  • 自适应阻抗案例分析(上)
  • 基于SpringBoot+LayUI+Vue智能停车收费系统
  • 第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八
  • 【工具】Charles对360浏览器抓包抓包
  • Nginx 迁移到 Caddy:一次完整的反向代理配置迁移实践
  • 美国技术论坛汇总
  • 滴滴面试:单表可以存200亿数据吗?单表真的只能存2000W,为什么?
  • PG数据库之视图详解
  • or-tools优化库记录
  • 数据结构:并查集
  • 不吹不黑,客观理性深入讨论国产服务器
  • Tessy学习笔记-CTE如何生成测试用例
  • linux_电脑一运行程序就死机怎么处理?
  • js 简单模拟JSON.stringify 功能
  • 大模型AI在教育领域有哪些创业机会?
  • 解决IllegalAccessException: java.lang.Class<xxx.xActivity> is not accessible
  • iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?
  • 【338】基于springboot的IT职业生涯规划系统
  • 202409电子学会青少年机器人技术等级考试(五级)实际操作真题
  • 架设NFS服务器并根据一些要求进行配置