dump_stack 分析使用

时间:2022-05-03
本文章向大家介绍dump_stack 分析使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

dump_stack是用来回溯内核运行的信息的,打印内核信息堆栈段;

dump_stack原型:

void dump_stack(void);

1、使用这个功能时需要将内核配置勾选上;

make menuconfig -> kernel hacking--> kernel debug

2、在函数中使用:

 1 #include <linux/module.h>
 2 #include <linux/init.h>
 3 #include <linux/kprobes.h>
 4 #include <asm/traps.h>
 5  
 6 MODULE_LICENSE("Dual BSD/GPL");
 7   
 8 static int __init hello_init(void)
 9 {
10      printk(KERN_ALERT "dump_stack startn");
11      dump_stack();
12      printk(KERN_ALERT "dump_stack overn");
13      return 0;
14  }
15  static void __exit hello_exit(void)
16  {
17       printk(KERN_ALERT "test modulen");
18  }
19  
20 module_init(hello_init);
21 module_exit(hello_exit);

3、需要加入的头文件:

1 #include <linux/kprobes.h>
2 #include <asm/traps.h>

4、得到hello.ko之后,insmod hello.ko,打印信息如下:

 1 [ 3719.352022] usb 1-8: new high speed USB device number 11 using ehci_hcd
 2 [ 4266.252826] usb 1-8: USB disconnect, device number 11
 3 [ 5246.942980] dump_stack start
 4 [ 5246.942985] Pid: 3438, comm: insmod Not tainted 3.0.0-21-generic #35-Ubuntu
 5 [ 5246.942987] Call Trace:
 6 [ 5246.942993]  [] hello_init+0x17/0x1000 [hello]
 7 [ 5246.942999]  [] do_one_initcall+0x42/0x180
 8 [ 5246.943003]  [] sys_init_module+0xbe/0x230
 9 [ 5246.943006]  [] system_call_fastpath+0x16/0x1b
10 [ 5246.943008] dump_stack over

在不同环境下,Call Trace也可能被称为Back Trace;