当调用这两个宏的时候,它们会引发 OOPS,导致栈的回溯和错误消息的打印,方便我们底层开发者查看日志进行定位调试问题,所以也是我们要掌握的调试内容,本篇以做实验为目的来给大家分享下BUG_ON(),WARN_ON(),dump_stack()的使用。本篇环境 硬件平台:飞凌OK3588开发板内核源码:5.10.66-rt53...
通过grep,发现 dump_stack函数原型存在于 kernel/lib/dump_stack.c 文件中。它的实现流程如下图所示: 可以看到关键的两个函数分别是 dump_stack_print_info 和 show_stack 。其中第一个函数是用来打印 info 信息的,而第二个函数是用来打印 Call trace 的。 Step 1: dump_stack_print_info 第一部分主要实现 ...
[384625.390570] dump_stack over 调用顺序:entry_SYSCALL_64_fastpath -> SyS_finit_module -> SYSC_finit_module -> load_module -> do_init_module -> do_one_initcall -> hello_init
打印函数调用关系的函数就是dump_stack(),该函数不仅可以用在系统出问题的时候,我们在调试内核的时候,可以通过dump_stack()函数的打印信息更方便的了解内核代码执行流程。 dump_stack()函数的实现和系统结构紧密相关,本文介绍ARM体系中dump_stack()函数的实现。该函数定义在arch/arm/kernel/traps.c文件中,调用dump_s...
一、dump_stack函数的作用 dump_stack函数是Linux内核中的一个函数,它用于打印当前函数调用栈的信息。通过调用dump_stack函数,我们可以获得当前线程的函数调用栈中每个函数的名称和地址,从而快速定位出错的位置。 二、使用dump_stack函数的步骤 使用dump_stack函数的步骤如下: 1. 在代码中包含所需的头文件: ```c ...
free(str);switch(param){caseMY_BUG_ON:BUG_ON(param);break;caseMY_BUG:BUG();break;caseMY_DUMPSTACK:dump_stack();break;caseMY_PANIC:panic("I am panicking, Why? -- you told so");break;default:printk("unknow param...\n");}returncount;}ssize_tmy_proc_read(structfile*filp,char*buf,...
简单实现dump_stack 0.首先确保你能写个内核模块:打印"hello kernel" 如果熟悉dump_stack的话,完全可以绕开此文,或者自己去看dump_stack代码实现之。 1.dump_stack是什么 经常调试内核一定对这个函数不陌生,因为我们大多数人调试内核的时候都受这个函数的 ...
dump_stack(); } int main(void) { test_function(); return 0; } 在上述代码中,我们定义了一个名为test_function的函数,在函数内部调用了dump_stack函数。在main函数中,我们调用test_function函数。当程序运行到调用dump_stack函数的位置时,会自动打印当前函数的调用栈信息。 三、dump_stack函数的输出信息 dum...
通过grep,发现 dump_stack 函数原型存在于 kernel/lib/dump_stack.c 文件中(注:笔者使用的是 4.4 版本的代码)。它的实现流程如下图所示: 可以看到关键的两个函数分别是 dump_stack_print_info 和 show_stack 。其中第一个函数是用来打印 info 信息的,而第二个函数是用来打印 Call trace 的。
在出现异常、故障等情况下,dump_stack函数可以打印出导致问题的函数调用路径,有助于定位问题的所在。 该函数定义在Linux内核的include/linux/kernel.h头文件中,其实现代码在kernel/printk/printk.c中。以下是该函数的详细解析。 函数原型 void dump_stack(void) 函数功能 打印当前执行路径上的函数调用堆栈信息。 函数...