#include<linux/kernel.h> voidfunction(){ // 代码逻辑 BUG_ON(some_critical_condition);// 如果some_critical_condition为true,则触发BUG } 你会发现BUG_ON比BUG内部多了条件参数传入判断,BUG_ON宏的典型用法是检查某个条件是否为真,如果为真就触发一个BUG,终止内核的运行。
#include <linux/kernel.h> void function() { // 代码逻辑 dump_stack(); // 触发调用堆栈打印信息 } 测试代码示例 接下来结合之前所学的创建proc节点,最后我写了个综合测试bug_on,warn_on,dump_stack的demo file:oops_test.c #include <linux/proc_fs.h> #include <linux/init.h> #include <linux/...
打印函数调用关系的函数就是dump_stack(),该函数不仅可以用在系统出问题的时候,我们在调试内核的时候,可以通过dump_stack()函数的打印信息更方便的了解内核代码执行流程。 dump_stack()函数的实现和系统结构紧密相关,本文介绍ARM体系中dump_stack()函数的实现。该函数定义在arch/arm/kernel/traps.c文件中,调用dump_s...
随便写了一个模块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 ...
1/**2* sprint_symbol_no_offset - Look up a kernel symbol and return it in a text buffer3* @buffer: buffer to be stored4* @address: address to lookup5*6* This function looks up a kernel symbol with @address and stores its name7* and module name to @buffer if possible. If no ...
通过grep,发现 dump_stack 函数原型存在于 kernel/lib/dump_stack.c 文件中。它的实现流程如下图所示: 可以看到关键的两个函数分别是 dump_stack_print_info 和 show_stack 。其中第一个函数是用来打印 info 信息的,而第二个函数是用来打印 Call trace 的。 Step 1: dump_stack_print_info 第一部分主要实现...
BUG(); //需要linux 内核开启General setup->Configure standard kernel features->BUG() support 1. 2. 或者使用更好的形式: AI检测代码解析 BUG_ON(bad_thing); 1. 可以用panic()引发更严重的错误。调用panic()不但会打印错误消息(Oops)而且还会挂起整个系统。显然,你只应该在极端恶劣的情况下使用它: ...
可以看一下kernel/kallsyms.c中的kallsyms_lookup()函数,它负责通过地址找到函数名,分为两部分: 1. 如果地址在编译内核时得到的地址范围内,就查找kallsyms_names数组来获得函数名。 2. 如果这个地址是某个内核模块中的函数,则在模块加载后的地址表中查找。
在出现异常、故障等情况下,dump_stack函数可以打印出导致问题的函数调用路径,有助于定位问题的所在。 该函数定义在Linux内核的include/linux/kernel.h头文件中,其实现代码在kernel/printk/printk.c中。以下是该函数的详细解析。 函数原型 void dump_stack(void) 函数功能 打印当前执行路径上的函数调用堆栈信息。 函数...
dump_stack函数是Linux内核中的一个函数,它用于打印当前函数调用栈的信息。通过调用dump_stack函数,我们可以获得当前线程的函数调用栈中每个函数的名称和地址,从而快速定位出错的位置。 二、使用dump_stack函数的步骤 使用dump_stack函数的步骤如下: 1. 在代码中包含所需的头文件: ```c #include <linux/kernel.h...