数据结构-内存调试工具

GDB(GNU Debugger)GNU 调试器 ,是 Linux 下 C/C++ 语言最常用的命令行调试工具

gcc 负责把 C 代码编译成可执行程序;gdb 用来调试这个程序

它能干什么

  1. 让程序停在指定位置(设置断点),一行一行执行代码;
  2. 随时看变量、指针、结构体、数组里面的值;
  3. 程序崩溃(段错误 segment fault)时,定位在哪一行代码崩掉;
  4. 可以临时修改内存里变量的值,测试不同情况;
  5. 查看函数调用栈,看函数是谁调用的。

基本操作

基本操作:

1.list -- 查看当前的代码

2.b 行号 --下断点

3.r -- run --从头开始运行点,到断点处会停

4.p 变量名 -- 查看当前的变量

5.n -- next ---单步调试

6.quit -- 退出

复制代码
reak function_name      # 在函数入口设断点
break file.c:42          # 在特定行设断点
run [args]               # 启动程序
next / step              # 单步跳过 / 进入函数
continue                 # 继续执行
backtrace / bt           # 查看调用栈
frame N                  # 切换到栈帧 N
info locals              # 显示当前栈帧的局部变量
print / p expr           # 打印表达式值
list                     # 显示当前位置源码

直接查看内存内容

复制代码
`x` (examine) 是 GDB 查看内存的利刃。
格式:`x /[个数][格式][大小] 地址`

- 格式:`x`(十六进制), `d`(十进制), `s`(字符串), `i`(指令)
- 大小:`b`(字节), `h`(半字2字节), `w`(字4字节), `g`(8字节)

x为命令符号,/区分操作符号和命令符号,40代表打印40个单元参数,单元格式为b,一个字节大小,第二个x代表打印的单元数据以十六进制呈现,从a0这个地址开始访问40个单元的数据,

Valgrind 是一套动态二进制插桩工具集合,最常用的是:

  • Memcheck:查内存错误(越界、UAF、重复 free、未初始化读、泄漏)

  • Callgrind:性能分析(函数调用/指令计数,配合 kcachegrind)

  • Helgrind /DRD:多线程数据竞争/锁问题

入门阶段建议只抓住:Memcheck + 正确编译参数 + 读懂报告 + 修复循环。

基础指令:在指令后添加对应需要编译的文件

复制代码
gcc -g -O0 -fno-omit-frame-pointer -Wall -Wextra  main.c foo.c
-g    //添加调试信息
-O0   //优化级别 不优化
-Wall -Wextra:先用编译器把明显问题扫一遍(能省大量时间)
-fno-omit-frame-pointer(让栈回溯更稳定 --帧)

基础使用:
valgrind ./a.out
valgrind  可执行文件

最常用指令:

复制代码
valgrind --leak-check=full ./app arg1 arg2

参数解释:
--leak-check=full:泄漏细节更全
--show-leak-kinds=all:显示 definitely/indirectly/possibly/ still reachable
--track-origins=yes:追踪未初始化值来源(慢一些,但非常值)

eg:
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes  ./a.out
相关推荐
m0_547486661 天前
《数据结构教程》全套 PPT课件2026
数据结构
tryxr1 天前
矩阵的几种基础变换
java·数据结构·算法·矩阵
mmmmath_31 天前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
All for pursuit.1 天前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
All for pursuit.1 天前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
渡我白衣1 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
晴天的雨.9922 天前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
淡海水2 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1012 天前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2401_839080542 天前
C++常见八股
数据结构·c++·算法