当前位置: 技术问答>linux和unix
高手帮忙解释一下dump_stack()打印出来的信息,谢谢
来源: 互联网 发布时间:2017-02-05
本文导语: 本帖最后由 gkzok 于 2010-07-29 11:15:23 编辑 听人说dump_stack()在调试中很有用,比printk好用,所以试了一下,但是不知道dump_stack()打出来的是什么东西 望高手指点一下啊,谢谢! 这个是我的模块源码 new_module.c #include...
望高手指点一下啊,谢谢!
这个是我的模块源码
new_module.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int g_hello_init()
{
printk(KERN_DEBUG "This is new module_init!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!n");
dump_stack();
return 0;
}
static void g_hello_exit()
{
printk(KERN_DEBUG "This is new module_exit~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n");
}
module_init(g_hello_init);
module_exit(g_hello_exit);
这个是内核打出来的对应信息
This is new module_init!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[] (dump_stack+0x0/0x14) from [] (g_hello_init+0x18/0x24 [new_module])
[] (g_hello_init+0x0/0x24 [new_module]) from [] (do_one_initcall+0x34/0x188)
[] (do_one_initcall+0x0/0x188) from [] (sys_init_module+0x90/0x1a0)
[] (sys_init_module+0x0/0x1a0) from [] (ret_fast_syscall+0x0/0x2c)
r7:00000080 r6:00000000 r5:beb5dd24 r4:00000254
1312.966 - init: event { 'add', '/module/new_module', 'module', '', -1, -1 }
|
打印内核调用栈,非常有用啊,但是不能替代printk,因为只能打印内核调用栈
可以看出
insmod 模块 之后,sys_init_module -->do_one_initcall ->g_hello_init->dump_stack
其中g_hello_init 就是你写的模块初始化函数
一般用在内核panic时定位发生错误的函数
可以看出
insmod 模块 之后,sys_init_module -->do_one_initcall ->g_hello_init->dump_stack
其中g_hello_init 就是你写的模块初始化函数
一般用在内核panic时定位发生错误的函数