原址

Oops 是内核调式中常见的错误之一,尽管Oops出错的时候会打印出堆栈和函数调用关系,但是要定位到哪一行代码,如果仅仅从打印来看,需要不断的增加打印信息来调式,往往事倍功半,这里以举一个例子,Oops的快速定位办法:

1.首先确认,你的编译工具链中有

arm-linux-gdb

必须具备gdb调式命令,如果没有,可以到 http://www.sourceware.org/gdb/ 上,下载并编译

2.确认你的内核选项中

  1. Kernel Debugging
  2. -> Compile the kernel with debug info  该选项选中​

3.编译内核保留 内核根目录下的 vmlinux 备用

4. 对于产生的Oops 日志

  1. [ERR][src/ipresolve.c #684]: total sendlen =102
  2. Unable to handle kernel NULL pointer dereference at virtual address 00000082
  3. pgd = c3b50000
  4. [00000082] *pgd=c3f3c031, *pte=00000000, *ppte=00000000
  5. Internal error: Oops: 1 [#1]
  6. Modules linked in:
  7. CPU: 0    Not tainted  (2.6.27.18-WR3.0bg_small-dirty #658)
  8. PC is at iscsi_eh_cmd_timed_out+0x1c/0xd0
  9. LR is at scsi_times_out+0x30/0xa4
  10. pc : []    lr : []    psr: a0000013
  11. sp : c03ebe68  ip : c03ebe80  fp : c03ebe7c
  12. r10: c0410be8  r9 : c03f0348  r8 : c03ea000
  13. r7 : c01b3bc0  r6 : c03ebea8  r5 : 00000100  r4 : c0550a80
  14. r3 : c36e5400  r2 : 00000002  r1 : c0aa34e0  r0 : c0550a80
  15. Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
  16. Control: 0001317f  Table: c3b50000  DAC: 00000017
  17. Process swapper (pid: 0, stack limit = 0xc03ea268)​

直接使用arm-linux-gdb vmlinux

然后 使用命令跳转

  1. l * iscsi_eh_cmd_timed_out+0x1c​

就能定位到出错的行

Oops快速定位代码行方法相关推荐

  1. 提高js调试效率的一个快捷键ctr+g 快速定位代码行

    大家在chrome调试时,找到一个js后, 发现想要找到原来的调试的地方好麻烦,需要关键字搜索,但是关键字如果有重复就很麻烦,第一次定位后,一刷新,再找很麻烦,有时候,我明明知道代码,但是还要一行行拖 ...

  2. linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置

    一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...

  3. RestfulToolKit:根据接口,快速定位代码

    工具:IDEA 插件:RestfulToolKit 快捷键: Ctrl + \  或 Ctrl + Alt + N 原文 RestfulToolKit:根据接口,快速定位代码

  4. Eclipse Jee 2019-09 的快键键与搜狗输入法有冲突,中文状态下快速格式化代码的方法。

    Eclipse Jee 2019-09 的快键键与搜狗输入法有冲突,英文状态下快速格式化代码的方法. Ctrl+Shift+F 当使用搜狗输入法的中文输入状态下,该快捷键就不好使了. 通过以上步骤能解 ...

  5. CSS——快速格式化代码的方法与步骤

    快速格式化代码的方法与步骤: 第一步:打开设置,有两种方法: ​ 方法一: ​ 方法二: 第二步:在设置页面搜索:emmet.include; 第三步:在settings.json下面的{用户}中添加 ...

  6. 【转】定位oops的具体代码行

    最近在学写linux驱动,按照宋宝华的<linux设备驱动开发详解>上的例子一步步来写.编译运行以后出现oops,不知道怎么调试,上网搜了一下,看到这篇文章,感觉不错转载到这里. 来自Li ...

  7. 快速定位代码位置的IDEA小插件

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 古语有云,工欲善其事,必先利其器,我们编码的时候也是一样的,TJ君不止一次的提到过,一个好的编码工具能让我们的编码效率事半功倍,也正因 ...

  8. VC,Windbg,gdb执行到指定代码行方法

    在调试的时候,当执行到一段代码时,为了调试或者其他目的需要,有时候需要对一些或者几行代码多次执行或者跳过几行代码的执行,这是很有用的,比如下面的一个循环: for(int i=0;i<num;i ...

  9. 使用grep命令快速定位代码位置

    有时候临时修改代码时,我们不需要或者没有条件使用复杂的代码编辑器.此时使用普通的文本编辑器如nano或vim,加上grep命令即可快速定位并修改代码. 例如,在kernel目录下搜索 CONFIG_B ...

最新文章

  1. 面对大规模AI集成,企业为何迟迟犹豫?
  2. js 自动关闭html页面,JS关闭窗口或JS关闭页面的几种代码分享
  3. 一个页面多个swiper问题解决
  4. 从零开始的AI·吃透kNN算法,学完我悟了(附实例代码)
  5. 概率分布的熵归一化(Entropy Normalization)
  6. win10 笔记本猎豹WiFi无法打开
  7. 年轻人不讲武德,居然在简历中藏木马!
  8. atmega8 例程:T1定时器 CTC模式 方波输出
  9. 计算机视觉论文-2021-05-31
  10. 鲲鹏凌云,并行科技Paramon通过华为云鲲鹏云服务兼容性认证
  11. matlab 复数求模长,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
  12. 流行-Manifold【0】-维基百科中文版本解释
  13. 看完豁然开朗!美团java面试难吗
  14. mysql 一张表的数据插入另一张表的sql语句
  15. linux学习笔记-切换目录
  16. 跑分cpu_跑分完爆骁龙 865?明年这些中端处理器真的要起飞
  17. 掷骰子游戏设计(C++)
  18. 愚人节将至,怎么恶搞最过瘾
  19. Linux玩dota2需要什么显卡,dota2最低配置要求 玩dota2需要什么电脑配置
  20. HDUOJ 1069 Monkey and Banana

热门文章

  1. mvn compile遇到的问题:-source1.3 中不支持注释
  2. cisco交换机端口“假死”现象
  3. java遍历文件夹并复制文件到指定目录
  4. localForage Web 离线存储
  5. 矩阵奇异值分解(SVD)
  6. php array 插值,PHP中的关联数组的插值(双引号字符串)
  7. QT中文乱码的解决方法,一劳永股的解决方法,如下
  8. ajax 执行成功 modal 关闭_Ajax请求中的async:false/true的作用
  9. python函数参数定义顺序_18 Python - 函数定义与参数
  10. 实验室服务器安装虚拟机,如何使用VM虚拟机创建私有网络试验室