免费注册 查看新帖 |

Chinaunix

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

linux oops之后,是否会产生core文件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-20 22:44 |只看该作者 |倒序浏览
linux kernel oops之后,是否会产生core文件?如果有,放在什么目录下,什么名字?

(有时候光靠oops信息无法根本定位出错问题,如果有core文件,用gdb可以查看frame的详细信息,包括各级函数调用的参数值)

论坛徽章:
0
2 [报告]
发表于 2007-09-23 01:26 |只看该作者
不一定有,看情况。 有的话也不一定有用吧,因为oops发生在内核层,gdb应该跟踪不进去的。(不知道我理解的对不对?FIXME)

调oops还是得分析*.ko的反汇编代码, 看出错时的IP值。  或者尝试把代码注释掉一部分,把bug所在的代码范围narrow down

论坛徽章:
0
3 [报告]
发表于 2007-09-23 13:00 |只看该作者
出现oops通常有打印信息,找到对应的打印语句通常会告诉你发生oops的原因。
至于core文件,这个是对于应用程序来说的(至少我没听说过kerenl会产生core文件)。通常只有发生MCA的时候kernel会dump当前内存所有信息到文件中。这和windows蓝屏时的dump类似

论坛徽章:
0
4 [报告]
发表于 2007-09-23 21:13 |只看该作者
原帖由 zx_wing 于 2007-9-23 13:00 发表
出现oops通常有打印信息,找到对应的打印语句通常会告诉你发生oops的原因。
至于core文件,这个是对于应用程序来说的(至少我没听说过kerenl会产生core文件)。通常只有发生MCA的时候kernel会dump当前内存所有 ...



Freebsd和OpenSolaris都有kernel的core dump,freebsd也是用gdb调试的。 OpenSolaris是用mdb来调试的。

因为我只熟悉调试OpenSolaris的内核,所以只能给你一个这个上面的例子:

http://blog.csdn.net/yayong/archive/2007/03/04/1520604.aspx

通过调试kernel crash dump,除了可以解决panic,也就是oops的问题,还能解决系统hang的问题。

据我了解linux有一个Linux kernel crash dump的项目,可以做这类事情。

刚才查了一下,这个项目叫LKCD:

http://lkcd.sourceforge.net/

还找了个中文的blog,有配置说明:

http://blog.chinaunix.net/u/17564/showart_199223.html

不过好像现在有些发行版本已经带这个LKCD的功能了,不用额外打patch了。

[ 本帖最后由 Solaris12 于 2007-9-24 14:45 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-09-24 09:27 |只看该作者
这个问题我也很想知道, 在freebsd下可以配置oops后生成core, 调试一些很难重现的bug非常有用啊

论坛徽章:
0
6 [报告]
发表于 2007-09-24 10:21 |只看该作者
原帖由 Solaris12 于 2007-9-23 21:13 发表



Freebsd和OpenSolaris都有kernel的core dump,freebsd也是用gdb调试的。 OpenSolaris是用mdb来调试的。

因为我只熟悉调试OpenSolaris的内核,所以只能给你一个这个上面的例子:

http://blog.csdn.n ...

学习了。这个功能很好。希望兄台能写一些solaris的扫盲贴,对此很敢兴趣,但没有太多的时间去了解。

论坛徽章:
0
7 [报告]
发表于 2007-09-24 13:31 |只看该作者
原帖由 simtiger 于 2007-9-20 22:44 发表
linux kernel oops之后,是否会产生core文件?如果有,放在什么目录下,什么名字?

(有时候光靠oops信息无法根本定位出错问题,如果有core文件,用gdb可以查看frame的详细信息,包括各级函数调用的参数值)

i think not

论坛徽章:
0
8 [报告]
发表于 2007-09-24 14:40 |只看该作者
原帖由 yj1804 于 2007-9-24 09:27 发表
这个问题我也很想知道, 在freebsd下可以配置oops后生成core, 调试一些很难重现的bug非常有用啊



对企业级系统而言,没有内核转储你很难解决一些比较难重现的bug。

Linux的内核debugger大都需要打一个patch,而且编译出来的内核如果支持调试一般就会影响性能,因为不是优化的编译。

所以内核转储加上二进制级的调试工具才是解决这一类型问题的最好办法。

在Solaris上是panic后的save core + mdb

在Linux上是LKCD 加上什么工具就不得而知了。

总之,写一个内核模块随便玩玩和写一个真正企业级系统上需要的稳定的内核模块,难度差别还是很大的,对调试者的要求还是很高的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP