数据结构-内存调试工具

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
相关推荐
shehuiyuelaiyuehao11 小时前
算法56,重排链表
数据结构·算法·链表
suhan12 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
极客 - L U12 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
Sarvartha15 小时前
栈的四则运算、栈的递归应用
数据结构·算法
GG.WinGel17 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
程序员清风18 小时前
缓存、索引与数据结构的工程选择
数据结构·spring·缓存
爱吃火鸡面呀19 小时前
Doris 数据划分实战:List 分区、分桶列与桶数选择
数据结构·list
BK贝壳1 天前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
挖井观天1 天前
《Java数据结构》第一讲:顺序表
数据结构
炘爚2 天前
数据结构算法总结
数据结构·python·算法