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

addr2line 和 gdb 定位内核模块 Oops 源码行

内核模块崩溃后,dmesg 里经常看到类似这样的回溯:

[ 123.456] EIP: [<f8a01234>] xxx_main+0x1a2a/0x2000 [xxx]

拿到符号加偏移xxx_main+0x1a2a,就能直接映射到 C 源码行。前提是模块编译时带了调试信息(-g,或内核开了CONFIG_DEBUG_INFO),且.ko文件没有被strip

1. addr2line(最快)

addr2line-e./xxx.ko xxx_main+0x1a2a

输出:

/path/to/source.c:123

如果模块代码移动了位置,加-f可同时打印函数名:

addr2line-f-e./xxx.ko xxx_main+0x1a2a

2. gdb(直接看上下文)

gdb ./xxx.ko(gdb)list *xxx_main+0x1a2a

gdb 会列出崩溃行附近的源代码。如果源码路径不对,用directory命令指向正确目录。

也可以只精确显示一行:

(gdb) info line *xxx_main+0x1a2a

3. 用 objdump 做源码级反汇编(备用)

这个方法要手动计算绝对地址,一般不优先用,但适合想看清到底哪条指令炸了。

先找函数在.ko中的段内偏移:

objdump-txxx.ko|grep' xxx_main$'00000500 g F .text 00001000 xxx_main# 示例

计算目标地址 = 0x500 + 0x1a2a = 0x1f2a,然后反汇编并穿插源码:

objdump-d-S--start-address=0x1f2a xxx.ko

注意事项

  • 如果崩溃日志只给了绝对地址(如0xf8a01234)而没给符号+偏移,先拿到模块加载基址,再算偏移:偏移 = 绝对地址 - 模块基址。然后用addr2line -e xxx.ko 偏移不可行,因为.ko是重定位文件,地址从 0 起算。此时仍建议用 gdb,gdb ./xxx.koinfo symbol 偏移能还原出函数和偏移,再用上面的方法定位行。
  • 务必保留编译时的.ko文件,且不能strip。如果用modpost等工具处理过,调试信息可能已丢失。
  • vmlinux同样适用,文件替换即可。
http://www.jsqmd.com/news/1171261/

相关文章:

  • TCP Socket 编程实现 HTTP/1.1 服务器:Go 语言 100 行代码解析请求与响应
  • 湖州家居产业园供水深井,本地正规打井公司推荐 - 瑞溪泉水利
  • 虚拟内存实战:3种页面置换算法(FIFO/LRU/CLOCK)缺页率模拟分析
  • TC78H651AFNG与PIC18F97J94的直流有刷电机驱动方案
  • VSCode Remote SSH 1.96 跳转缓慢:Go 语言服务器配置与 3 个关键参数调优
  • ClickHouse 26.6 版本发布说明
  • 【实战复盘】一体机无日志黑屏/蓝屏死机排查全记录
  • STM32 AT命令解析库:高效嵌入式通信的终极解决方案
  • 灰鸽子与冰河木马对比分析:从CC架构到免杀技术的20年演进
  • 辐射4 Ubuntu鼠标指针MOD制作教程:从素材提取到游戏界面美化
  • Java调用C库:JNA 5分钟极速部署与实战指南
  • Android Stuidio中下载TRAE插件依赖的JCEF后打不开
  • 凸优化问题强对偶性:Slater条件与KKT条件的5个关键案例解析
  • 深度学习核心算法解析:从CNN到Transformer的实战指南
  • Photoshop 动作录制:1分钟自动化生成1寸/2寸证件照排版(附动作文件)
  • Hadoop 3.2.4 云服务器ECS部署:阿里云3节点集群配置与安全组规则详解
  • MoE模型训练稳定性:专家初始化与损失函数设计的关键作用
  • Rhino 插件命令开发实战:从 CRhinoCommand 类到 5 个核心成员函数实现
  • 4K修复版《阿甘正传》:从技术视角解读纯粹行动的力量
  • PVE 8.x 虚拟机迁移至 VMware ESXi 8:5步手动转换与3个关键驱动修复
  • Qt混合开发:QML与C++交互的4种核心路径与最佳实践
  • Java 数组全套精讲(定义、初始化、默认值、遍历、Arrays工具类、引用机制、方法传参)2026.7.11
  • XLSX Workbench 与 ALV 对比:3种SAP数据导出方案选型指南
  • 物理层信道复用技术 3种方案详解:FDM、TDM、CDMA 原理与带宽计算
  • 离散数学函数概念辨析:单射、满射、双射的3种判定方法与集合论基础
  • 计算机视觉完整学习路径:从CNN到Transformer的实战指南
  • Linux内存管理故障排查:从MMC误操作到系统恢复实战
  • DeepSeek-VL2:基于MoE架构的多模态视觉语言大模型技术解析
  • yuzu模拟器完全指南:如何在PC上免费畅玩Switch游戏的终极方案
  • MTTF/MTTR/MTBF 3 大指标详解:从公式推导到 SRE 实践应用