如果你很幸运当你的内核模块崩溃时,你会得到一个带有很多信息的日志,比如寄存器中的值等。一个这样的信息是堆栈跟踪(对于核心转储也是如此,但我最初问这个内核模块)。就拿这个例子:如何充分利用堆栈跟踪(从内核或核心转储)?
[<f97ade02>] ? skink_free_devices+0x32/0xb0 [skin_kernel]
[<f97aba45>] ? cleanup_module+0x1e5/0x550 [skin_kernel]
[<c017d0e7>] ? __stop_machine+0x57/0x70
[<c016dec0>] ? __try_stop_module+0x0/0x30
[<c016f069>] ? sys_delete_module+0x149/0x210
[<c0102f24>] ? sysenter_do_call+0x12/0x16
我的猜测是,+<number1>/<number2>
有事情做与已经发生了误差函数的偏移量。也就是说,通过检查这个数字,或许看看程序集输出,我应该能够找出发生该错误的那一行(更好的是,指令)。那是对的吗?
我的问题是,这两个数字究竟是什么?你如何利用它们?
我不知道你可以gdb linux本身!这太棒了! – Shahbaz 2012-04-16 12:13:10
虽然'vmlinux'在哪里?我认为这将是Linux内核本身(在/ boot中),但是'vmlinuz ...'和addr2line说“文件格式不被识别”虽然没有什么大不了,因为我对自己的模块更感兴趣。 – Shahbaz 2012-04-16 12:15:14
@Shahbaz vmlinuz只是'vmlinux'的压缩和/或剥离版本。 BOth通常会放在'/ boot'文件夹中。我现在没有和我一起检查我的linux系统。谷歌周围的两个:)这里有一些首发。 [One](http://superuser.com/questions/62575/where-is-vmlinux-on-my-ubuntu-installation)和[Two](http://superuser.com/questions/298826/how-do -i-uncompress-vmlinuz-to-vmlinux) – 2012-04-16 12:23:37