原址

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. NLP重要模型详解,换个方式学(内附资源)
  2. 内推|底层翻身的机会来了,快来看一看!
  3. mysql if begin end_MySQL存储过程例子,不能在if else里面用begin end否则会报错Erro_MySQL...
  4. 11月碎碎念-谈职场礼貌
  5. 牛客题霸 [矩阵元素查找] C++题解/答案
  6. 【DP】Mobile Service(jzoj 1327)
  7. C++ 11 深度学习(九)C++文件IO
  8. 晋中计算机专业对口大学,山西晋中计算机专业好就业吗?,计算机专业
  9. CSDN如何找到自己关注的博客专栏
  10. 【Computer Organization笔记05】运算器基本功能,定点运算器,Am2901的组成与功能,VHDL硬件描述语言
  11. 2010年IT行业十大收购
  12. centos7 如何安装部署k8s_如何在CentOS 7上正确安装Chromium
  13. 什么是磁力链接如何愉快的使用磁力链接
  14. signature=daa3bbe3ad9a7c162ba9d98f8d9e7530,来用百度密语吧!!!
  15. 基于微信小程序的医疗监督反馈小程序的设计与实现-计算机毕业设计源码+LW文档
  16. 计算机如何寻址,计算机运算之直接寻址法与间接寻址法
  17. bootloader recovery
  18. 前端接收java后端返回base64二进制流下载mp4
  19. Turing Tape (推公式 模拟)
  20. 修改植物大战僵尸阳关代码

热门文章

  1. MongoDB学习:关闭mongod方式
  2. jQuery数组处理汇总
  3. 获取客户端上次请求的URL
  4. 抓取Web网页数据分析
  5. wpbakery Visual Composer - web网页可视化 编辑器 介紹
  6. 【机器学习】概率神经网络(PNN)的python实现
  7. 客户服务器网络系统的优缺点,浅析网络存储方案的三种类型及其优缺点
  8. linux bash 删除所有空格,删除字符串中的所有的空白并用空格分割单词.md
  9. 前端怎么携带cookie发送php,PHP如何执行传递cookie的http请求并将结果保存到字符串...
  10. 自动轮播图html代码适应手机,JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)...