dump_stack的简单使用
来源:互联网 发布:淘宝兼职招聘 编辑:程序博客网 时间:2024/06/02 02:41
刚刚接触内核,在调试过程中用printk打印信息当然是直接有效的办法,但当我们不知到一个函数或者一个模块到底在哪里出了问题时我们可以利用dump_stack有效的找到问题的根源,下面只是简单的给出了使用方法。
注意使用dump_stack()要加上这两个头文件
然后make得到hello.ko
在运行insmod hello.ko把模块插入内核
运行dmesg
[ 3719.352022] usb 1-8: new high speed USB device number 11 using ehci_hcd
[ 4266.252826] usb 1-8: USB disconnect, device number 11
[ 5246.942980] dump_stack start
[ 5246.942985] Pid: 3438, comm: insmod Not tainted 3.0.0-21-generic #35-Ubuntu
[ 5246.942987] Call Trace:
[ 5246.942993] [] hello_init+0x17/0x1000 [hello]
[ 5246.942999] [] do_one_initcall+0x42/0x180
[ 5246.943003] [] sys_init_module+0xbe/0x230
[ 5246.943006] [] system_call_fastpath+0x16/0x1b
[ 5246.943008] dump_stack over
打出运行这个模块时调用的函数
删除模rmmod hello
我在自己的主机上试了一下dump_stack()
hello.c文件
点击(此处)折叠或打开
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/kprobes.h>
- #include <asm/traps.h>
-
- MODULE_LICENSE("Dual BSD/GPL");
-
- static int __init hello_init(void)
- {
- printk(KERN_ALERT"dump_stack start\n");
- dump_stack();
- printk(KERN_ALERT"dump_stack over\n");
- return 0;
- }
- static void __exit hello_exit(void)
- {
- printk(KERN_ALERT"test module\n");
- }
-
- module_init(hello_init);
- module_exit(hello_exit);
- #include <linux/kprobes.h>
- #include <asm/traps.h>
在运行insmod hello.ko把模块插入内核
运行dmesg
[ 3719.352022] usb 1-8: new high speed USB device number 11 using ehci_hcd
[ 4266.252826] usb 1-8: USB disconnect, device number 11
[ 5246.942980] dump_stack start
[ 5246.942985] Pid: 3438, comm: insmod Not tainted 3.0.0-21-generic #35-Ubuntu
[ 5246.942987] Call Trace:
[ 5246.942993] [] hello_init+0x17/0x1000 [hello]
[ 5246.942999] [] do_one_initcall+0x42/0x180
[ 5246.943003] [] sys_init_module+0xbe/0x230
[ 5246.943006] [] system_call_fastpath+0x16/0x1b
[ 5246.943008] dump_stack over
打出运行这个模块时调用的函数
删除模rmmod hello
insmod 模块 之后,system_call_fastpath --> sys_init_module -->do_one_initcall ->hello_init->dump_stack
其中hello_init 就是你写的模块初始化函数
0 0
- dump_stack的简单使用
- dump_stack的简单使用
- dump_stack的简单使用
- dump_stack的简单使用
- dump_stack的简单使用
- dump_stack的简单使用
- dump_stack的简单使用 [Kernel space]
- 应用层的dump_stack()
- dump_stack()
- dump_stack
- dump_stack( )
- 使用dump_stack()打印出内核调用堆栈
- 使用dump_stack查看内核函数调用
- 使用dump_stack()打印出内核调用堆栈
- 使用dump_stack()打印出内核调用堆栈
- 关于BUG_ON() dump_stack 的一点笔记
- 内核中dump_stack()的实现,并在用户态模拟dump_stack()
- Linux内核调试之使用BUG_ON 和dump_stack
- Java的缓存机制
- Android 网络请求超时处理方案
- HBase shell 无法使用 Backspace 键-解决方案
- Hibernate关联之 一对一连接表双向关联
- C++:宏替换的误区
- dump_stack的简单使用
- Objective-C代码规范(1)
- svn
- eclipse中出现的错误
- Java笔记学习总结(四)
- cocos2d-x之函数更新
- iOS5系统API和5个开源库的JSON解析速度测试
- 性别和教育:先天加上后天【经济学人】
- 在程序目录下创建文件夹