打印函数调用关系的函数就是dump_stack(),该函数不仅可以用在系统出问题的时候,我们在调试内核的时候,可以通过dump_stack()函数的打印信息更方便的了解内核代码执行流程。 dump_stack()函数的实现和系统结构紧密相关,本文介绍ARM体系中dump_stack()函数的实现。该函数定义在arch/arm/kernel/traps.c文件中,调用dump_s...
#include <linux/kernel.h> void function() { // 代码逻辑 BUG_ON(some_critical_condition); // 如果some_critical_condition为true,则触发BUG } 你会发现BUG_ON比BUG内部多了条件参数传入判断,BUG_ON 宏的典型用法是检查某个条件是否为真,如果为真就触发一个 BUG,终止内核的运行。 注意事项 避免在生产环...
随便写了一个模块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 ...
#include<linux/kernel.h> voidfunction(){ // 代码逻辑 BUG_ON(some_critical_condition);// 如果some_critical_condition为true,则触发BUG } 你会发现BUG_ON比BUG内部多了条件参数传入判断,BUG_ON宏的典型用法是检查某个条件是否为真,如果为真就触发一个BUG,终止内核的运行。
BUG(); //需要linux 内核开启General setup->Configure standard kernel features->BUG() support 1. 2. 或者使用更好的形式: BUG_ON(bad_thing); 1. 可以用panic()引发更严重的错误。调用panic()不但会打印错误消息(Oops)而且还会挂起整个系统。显然,你只应该在极端恶劣的情况下使用它: ...
dump_stack()函数的实现和系统结构紧密相关,本文介绍ARM体系中dump_stack()函数的实现。该函数定义在arch/arm/kernel/traps.c文件中,调用dump_stack()函数不需要添加头文件,基本上在内核代码任何地方都可以直接使用该函数。 相关基本知识 读者需要了解一些ARM汇编的基本知识。在讲代码之前,我先简单说说内核中函数调用...
通过grep,发现 dump_stack 函数原型存在于 kernel/lib/dump_stack.c 文件中。它的实现流程如下图所示: 可以看到关键的两个函数分别是 dump_stack_print_info 和 show_stack 。其中第一个函数是用来打印 info 信息的,而第二个函数是用来打印 Call trace 的。 Step 1: dump_stack_print_info 第一部分主要实现...
dump_stack 是 Linux 内核开发中常用的一个调试工具,用于快速分析函数调用流程或定位 bug。其功能通过 dump_stack 函数在 kernel/lib/dump_stack.c 文件中实现。本文将深入剖析 dump_stack 的工作原理与实现流程。dump_stack 的核心功能分为两部分:打印 info 信息和打印调用栈信息。实现主要通过 dump_...
#include <linux/kernel.h> void test_function(void) { dump_stack(); } int main(void) { test_function(); return 0; } 在上述代码中,我们定义了一个名为test_function的函数,在函数内部调用了dump_stack函数。在main函数中,我们调用test_function函数。当程序运行到调用dump_stack函数的位置时,会自动打...
linux-4.14 概述 栈回溯的目的是将函数的调用栈打印出来,对于分析函数调用和debug系统异常会很有帮助。对于Aarch64,x29用于用来当做帧指针,x30用来存放函数返回地址。 正文 原理 首先通过一个简单的程序分析一下栈回溯的原理,下面是测试程序: 1#include <stdio.h>23intfunc3(intb)4{5inta =10;6printf("a =...