在Linux内核中提供了一个可以打印出内核调用堆栈的函数 dump_stack()
该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。
该函数头文件为:
#include <asm/ptrace.h>
使用方式:
直接在想要查看的函数中添加
dump_stack();
案例:
随便写了一个模块test.c,test.c代码如下:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/ptrace.h>
void aaa(int a);
void bbb(int b);
void ccc(int c);
void aaa(int a)
{
int b = a + 10;
bbb(b);
}
void bbb(int b)
{
int c = b + 10;
ccc(c);
}
void ccc(int c)
{
dump_stack();
printk("c is %d\n",c);
}
static int __init my_init( void )
{
int a = 10;
aaa(a);
printk("my_init \n");
}
static void __exit my_exit(void )
{
printk("my_exit \n");
}
module_init(my_init);
module_exit(my_exit);
MO