内核panic后使用GDB调试

内核运行时若出现panic,可以根据EIT的值用GDB来定位出错代码:

例如我的出错代码的EIT的值为0x80cf7c00+0x6f,可以在GDB下用b或l方式来定位代码。

[email protected]:~/work/XXXXX$ gdb ./android/out/target/product/Your_Image_Name/obj/kernel/vmlinux
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/yin123/work/XXXXX/android/out/target/product/Your_Image_Name/obj/kernel/vmlinux...done.
(gdb) b *0x80cf7c6f
Breakpoint 1 at 0x80cf7c6f: file /home/yin123/work/XXXXX/linux-3.10/drivers/cpufreq/yyyyy.c, line 123.
(gdb) l *oc_thread+0x6f
0x80cf7c6f is in oc_thread (/home/yin123/work/XXXXX/linux-3.10/drivers/cpufreq/yyyyy.c:123).
warning: Source file is more recent than executable.
118     *(strchr(buf, ‘.‘)) = ‘\0‘;
119     sscanf(buf, "%u", &tmp_runtime);
120
121     /* get last recorded uptime */
122     get_data_from_sysfs(FILE_PATH, buf);
123     (strchr(buf, ‘ ‘)) = ‘\0‘;
124     sscanf(buf, "%u", &old_runtime);
125
126     if (tmp_runtime <= old_runtime)
127     {
时间: 2024-10-14 01:13:59

内核panic后使用GDB调试的相关文章

ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联

ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Lite slave 接口,有 3 个 AXI master 接口.2 个 ACE slave 接口可以相互 snoop 对方,ACE-Lite slave 接口可以 snoop 这 2 个 ACE slave 接口.本文首先介绍cci-400相关结构,然后以内核的panic为引子,最后给出导致内核pa

GDB调试详解

GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作. 命令 解释 示例 file <文件名> 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample r Run的简写,运行被调试的程序.如果此前没有下过断点,则执行完整个程序:如果有断点,则程序暂停在第一个

STM32F103 ucLinux开发之四(内核启动后的调试)

Stm32-uclinux启动后的调试 1.  修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后,下面两个宏定义,导致计算错误,从而Backtrace的. #define __pfn_to_page(pfn)     (mem_map + ((pfn) - ARCH_PFN_OFFSET)) #define __page_to_pfn(page)  ((unsigned long)((page

使用jtag+gdb调试arm上的linux内核和驱动

调试对象为公司一块使用s3c2440的板子,调试器为基于ft2232d的openjtag,pc操作系统为ubunut14.04.2 x64,jtag->gdb桥为openocd 0.9.0.1.准备内核源码拷贝出两份完全一样的内核源码,不加调试信息的一份烧写/下载到板子上,加调试信息的一份用于调试.这里用uboot+nfs的方式下载内核.~/buildspacce/linux-2.6.32.2_debug~/buildspacce/linux-2.6.32.2_releasedebug版源码做如

系统panic后主动广播最后内核dmesg信息-一个几乎可以使用的方案

在<远程触发SYSRQ获取最新的dmesg信息-一个几乎没有什么用的方案>中,我认为远程触发SYSRQ并没有什么实际的用处,系统没有挂起时,用SSH等标准方式会好很多,系统挂起时,远程触发在多数情况下均无法得到响应.那么有什么方法在系统panic的时候通知外部呢?       当然采用crash kexec kernel的方式会是一个好方法,但是那毕竟是为了debug而生的,有的时候只是想知道dmesg的最后几行就好,要知道此时系统已经完全没有机会记录日志了,用户态的任何进程均已经全军覆没.但

GDB 调试 C/C++ Project

平时做算法题目, 没少用到 GDB, 但今天才意识到 Project 的调试方法与单个 cpp 文件的不同之处, 比如 gdb list 命令, 在单个 cpp 文件中列出的是源代码, 但在 project 中却什么都不显示 Project Debug 时, file 参数的使用 [1] 有讲解, UP 主问的问题和我遇到的一样, 只不过, 没能解决我的问题(我的问题更2B一些). 出现的错误 1. 执行命令, make, gdb test, gdb l No symbol table is l

使用 GDB 调试多进程程序

GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 ([email protected]), 软件工程师, IBM中国软件开发中心 2007 年 7 月 30 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统: 进程

用qemu与gdb调试linux kernel tcp/ip协议栈

description 用gdb debug linux kernel容易吗?其实要走到这步真的不容易啊,其实也难道是不难,就是要知道的东西太多了.用gdb debug linux kernel 可以有2中方式:UML和qemu方式,这里主要说qemu,从源码编译安装qemu很费劲. 准备环境 linux OS: Debian7.5-i386(当时最新的Wheezy,装在VMware10上,我用的在线安装,安装后以text方式跑起来,我的笔记本配置资源有限!) root fs:Debian-Wh

Linux GDB调试全面解析

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程