免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4159 | 回复: 10
打印 上一主题 下一主题

[内核入门] 求助 如何分析crash,有没有专门相关的论坛或者网站? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-30 18:08 |只看该作者 |倒序浏览
如何分析crash,有没有专门相关的论坛或者网站?

论坛徽章:
0
2 [报告]
发表于 2012-07-30 18:38 |只看该作者
最近准备了将近100页PPT,在公司分3课时来专门培训如何查内核crash&宕机问题。

查内核crash与查应用程序crash没什么差别,无非就是内核crash的工具少一点或者说使用起来麻烦一点(比如kgdb对gdb),所以相关手段原始一点,比如一般是objdump反汇编后看汇编代码。要看汇编,那么AT&T汇编指令,函数调用栈帧就是最基本的;然后是内核的一系列概念,比如上下文(应用程序不用考虑这个,但内核就要考虑当前是进程上下文还是中断上下文,比如中断上下文调用睡眠函数)、栈(应用层就一个栈,内核有内核栈、中断栈、X86_64里特别的中断还有额外的栈)、加锁(死锁宕机)、同步(多核情况下,一个CPU把某公共资源释放了,另外一个CPU还去使用,宕机)、业务逻辑(异常情况下的主动宕机,BUG()、BUG_ON(),类似于AC下的assert)。

用google搜索linux oops开始入门吧:比如http://www.linuxforu.com/2011/01/understanding-a-kernel-oops/

论坛徽章:
0
3 [报告]
发表于 2012-07-30 18:43 |只看该作者
目前公司把该封的都封了,我也就只能来CU灌下水(要么只能上公司BBS去灌水),而且还不能说得太细,LZ还有啥想问的,我回去上网再回,

论坛徽章:
0
4 [报告]
发表于 2012-07-30 20:44 |只看该作者
谢谢,楼上
我想问问当你具体拿到一个core dump的时候,我想应该会有一个大概得判断
比如 是访问内存异常,或是watchdog所致,或者由于硬件的缺陷导致堆栈发生错误,上面的比如是我的一些猜想。
请问有这样基本的判断吗?如果有这样的基本的判断,又是怎么得出来的呢?

论坛徽章:
0
5 [报告]
发表于 2012-07-30 21:41 |只看该作者
呵呵 这种(watchdog、空指针访问、BUG主动宕机)你看到oops就能知道了 一般情况都有明确的字符串提示 内核版本不同而不一样 你弄几个宕机示例看看打印的oops信息就知道了

论坛徽章:
0
6 [报告]
发表于 2012-07-30 21:41 |只看该作者
内核版本不同提示的字符串不一样

论坛徽章:
0
7 [报告]
发表于 2012-07-30 21:58 |只看该作者
回复 5# lenky0401
怎么弄弄几个宕机示例并查看打印的oops信息
我菜的很
ps 你给的例子很好,我刚才看过了


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
8 [报告]
发表于 2012-07-31 09:03 |只看该作者
回复 6# lenky0401

lenky0401兄可以在CU开个专题讨论啊。


   

论坛徽章:
0
9 [报告]
发表于 2012-08-01 12:21 |只看该作者
回复 3# lenky0401


   
在使用cash的时候,
用list 命令的用法,比如

crash> list __i2c_board_list
c07f6d1c
df8af9e0
df8af9a0
df8af960
df8af920
df8af8e0
df8af8a0
df8af860
df8af820
df8af7e0
df8af7a0
df8af4e0
df8af4a0

而后
crash> struct i2c_devinfo df8af4a0
struct i2c_devinfo {
  list = {
    next = 0xc07f6d1c,
    prev = 0xdf8af4e0
  },
  busnum = 3,
  board_info = {
    type = "rmi_i2c\000\000\000\000\000\000\000\000\000\000\000\000",
    flags = 0,
    addr = 32,
    platform_data = 0xc07d5568,
    archdata = 0x0,
    irq = 0
  }
}

我想知道,有没有相关的命令,把所有在list的设备的全部详细信息都列出来?


论坛徽章:
0
10 [报告]
发表于 2012-08-01 16:34 |只看该作者
回复 2# lenky0401

如果已知数据结构,并且知道某一变量的某一成员的地址,假设知道 detected地址是c07f9f94,有没有命令找到其他成员的地址,如怎么找到flags地址??


    struct i2c_client {
        unsigned short flags;                /* div., see below                */
        unsigned short addr;                /* chip address - NOTE: 7bit        */
                                        /* addresses are stored in the        */
                                        /* _LOWER_ 7 bits                */
        char name[I2C_NAME_SIZE];
        struct i2c_adapter *adapter;        /* the adapter we sit on        */
        struct i2c_driver *driver;        /* and our access routines        */
        struct device dev;                /* the device structure                */
        int irq;                        /* irq issued by device                */
        struct list_head detected;
};
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP