
linux debug
zmjames2000
这个作者很懒,什么都没留下…
展开
-
Linux内核调试技术——进程上下文R状态死锁监测
come from :https://blog.csdn.net/luckyapple1028/article/details/51932414前一篇博文介绍了内核监测D状态死锁的hung task机制,本文介绍另一种死锁状态的监测手段——R状态死锁监测。R状态死锁指的是某一任务一直处于TASK_RUNNING态且一直占用着CPU,从而导致其他进程得不到调度而饿死的情况。一般情况下,R状态死...转载 2019-03-11 10:29:52 · 640 阅读 · 0 评论 -
usageErr(const char *format, ...) ----- 记录总结tool
#include <stdarg.h>void usageErr(const char *format, ...){ va_list argList; fflush(stdout); fprintf(stderr, "Usage: "); va_start(argList, format); vfprintf(stderr, f...转载 2019-02-19 12:00:50 · 1009 阅读 · 0 评论 -
Linux内核调试方法总结之反汇编 ------------ objdumo, nm, addr2line
come from :https://www.cnblogs.com/justin-y-lin/p/5599217.htmlLinux反汇编调试方法Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类问题。代码示例如下:#include <signal....转载 2019-03-12 07:12:38 · 1177 阅读 · 0 评论 -
Linux内核调试方法总结之coredump ----- Good readelf -h coredump
come from :https://www.cnblogs.com/justin-y-lin/p/5598305.html什么是core dump?分析core dump是Linux应用程序调试的一种有效方式,像内核调试抓取ram dump一样,core dump主要是获取应用程序崩溃时的现场信息,如程序运行时的内存、寄存器状态、堆栈指针、内存管理信息、函数调用堆栈信息等。Core...转载 2019-03-12 07:12:46 · 649 阅读 · 0 评论 -
Linux内核调试方法总结之死锁问题分析
come from :https://www.cnblogs.com/justin-y-lin/p/5424602.html死锁问题分析死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务,而且还会占用系统资源,影响其他进程。所以内核中设计了内核死锁检测机制,...转载 2019-03-12 07:12:59 · 883 阅读 · 0 评论 -
Linux内核调试方法总结之bugreport
come from :https://www.cnblogs.com/justin-y-lin/p/5424600.htmlbugreport【用途】Android性能分析工具,bugreport记录了Android启动过程日志,启动后的系统状态,包括进程列表、内存信息、VM信息等【使用方法】Adb bugreport > bugreport.txt (导出bugrepor...转载 2019-03-12 07:13:09 · 606 阅读 · 0 评论 -
Linux内核调试方法总结之dumpsys
come from :https://www.cnblogs.com/justin-y-lin/p/5424598.htmldumpsys【用途】Android系统提供的dumpsys工具可以用来查看系统服务信息与状态。【使用说明】adb shell dumpsys <service> [<option>]【常用服务解释】 编号 ...转载 2019-03-12 07:13:13 · 433 阅读 · 0 评论 -
Linux内核调试方法总结之Jprobes
come from :https://www.cnblogs.com/justin-y-lin/p/5424595.htmlJprobes【用途】类似于Kprobes和Return Probes,区别在于,Kprobes可以在任意指令处插入探针,Jprobes只在函数入口插入探针,而Return Probes则是在函数返回时插入探针。【接口说明】【参考samples/kprobe...转载 2019-03-12 07:12:27 · 273 阅读 · 0 评论 -
Linux内核调试方法总结之Kprobes
come from :https://www.cnblogs.com/justin-y-lin/p/5424582.htmlKprobes【用途】【参考kernel/Documentation/kprobes.txt帮助文档】Kprobes是一个轻量级内核调试工具,同时又是其他一些更高级的内核调试工具(如perf和systemtap)的基础,在Linux 4.0内核版本中,eBPF特...转载 2019-03-12 07:12:20 · 427 阅读 · 0 评论 -
Linux内核调试方法总结之内核通知链 ----Good
come from :https://www.cnblogs.com/justin-y-lin/p/5424559.html1.内核通知链表简介(引用网络资料) 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而...转载 2019-03-12 07:12:10 · 292 阅读 · 0 评论 -
Linux内核调试方法总结之strace ,ltrace, ptrace, ftrace, sysrq
come from :https://www.cnblogs.com/justin-y-lin/tag/%E5%86%85%E6%A0%B8/strace【用途】strace是一个功能强大的调试、分析、诊断工具,跟踪程序或进程执行时的系统调用和所接收的信号。可将所调用的系统调用的名称、参数和返回值输出到标准输出或者输出到-o指定的文件。【命令格式】strace [ -dffh...转载 2019-03-12 07:11:56 · 11305 阅读 · 0 评论 -
Linux应用调试-strace命令 ---- Good
come from :https://www.cnblogs.com/lifexy/p/8034041.html1.strace简介strace常用来跟踪进程执行时的系统调用和所接收的信号。通过strace可以知道应用程序打开了哪些文件,以及读写了什么内容,包括消耗的时间以及返回值等2.安装strace命令首先需要以下两个文件:strace-4.5.15.tar.bz2...转载 2019-03-12 07:11:48 · 184 阅读 · 0 评论 -
ARM 内核SP,LR,PC寄存器
come from :https://blog.csdn.net/allan0508/article/details/52624618深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益。 1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不...转载 2019-03-11 16:34:07 · 262 阅读 · 0 评论 -
39. 定制寄存器编辑器 内核调试
#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/...转载 2019-03-11 19:45:39 · 214 阅读 · 0 评论 -
Linux内核调试技术——进程D状态死锁检测
come from :https://blog.csdn.net/luckyapple1028/article/details/51931210Linux的进程存在多种状态,如TASK_RUNNING的运行态、EXIT_DEAD的停止态和TASK_INTERRUPTIBLE的接收信号的等待状态等等(可在include/linux/sched.h中查看)。其中有一种状态等待为TASK_UNIN...转载 2019-03-11 10:24:04 · 853 阅读 · 0 评论 -
Linux内核调试方法总结之序言 -------Good
come from :https://www.cnblogs.com/justin-y-lin/p/5424434.html本系列主要介绍Linux内核死机、异常重启类稳定性问题的调试方法。在Linux系统中,一切皆为文件,而系统运行的载体,是一类特殊的文件,即进程。因此,我尝试从进程的角度分析Linux内核的死机、异常重启等问题。在内核空间,内核本身是一个特权级的进程,它包含一系列系统...转载 2019-03-11 10:39:13 · 213 阅读 · 0 评论 -
Linux内核调试方法总结之栈帧 ---------Good
come from :https://www.cnblogs.com/justin-y-lin/p/5424465.html栈帧栈帧和指针可以说是C语言的精髓。栈帧是一种特殊的数据结构,在C语言函数调用时,栈帧用来保存当前函数的父一级函数的栈底指针,当前函数的局部变量以及被调用函数返回后下一条汇编指令的地址。如下图所示: 栈帧位于栈内存...转载 2019-03-11 10:40:23 · 518 阅读 · 0 评论 -
Linux内核调试方法总结之Call Trace
come from :https://www.cnblogs.com/justin-y-lin/p/5424488.html内核态call trace内核态有三种出错情况,分别是bug, oops和panic。bug属于轻微错误,比如在spin_lock期间调用了sleep,导致潜在的死锁问题,等等。oops代表某一用户进程出现错误,需要杀死用户进程。这时如果用户进程占用了某些信...转载 2019-03-11 10:45:26 · 8682 阅读 · 0 评论 -
Linux内核调试方法总结之调试宏
come from :https://www.cnblogs.com/justin-y-lin/p/5424495.html本文介绍的内核调试宏属于静态调试方法,通过调试宏主动触发oops从而打印出函数调用栈信息。1) BUG_ON查看bug处堆栈内容,主动制造oopsLinux中BUG_ON,WARN_ON用于调试,比如#defineBUG_ON(condition)...转载 2019-03-11 10:47:56 · 361 阅读 · 0 评论 -
Linux内核调试方法总结之backtrace -----Good 应用层自己实现栈回溯
come from :https://www.cnblogs.com/justin-y-lin/p/5424524.htmlbacktrace【用途】用户态或者内核态程序异常退出时回溯堆栈信息【原理】通过对当前堆栈的分析,回溯上层函数在当前栈中的帧地址,直至顶层函数。帧地址是指在栈中存在局部变量、上一级函数返回地址、寄存器值的内存空间。由于不同处理器堆栈实现不同(向上增长和向下增长)...转载 2019-03-11 10:51:17 · 1375 阅读 · 0 评论 -
38.Linux驱动调试-根据系统时钟定位出错位置 -----Good
come from :https://www.cnblogs.com/lifexy/p/8024415.html当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的?答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便在中断函数中打印该进程的信息1.先来回忆下在之前的第5章内...转载 2019-03-05 22:30:06 · 485 阅读 · 0 评论 -
37.Linux驱动调试-根据oops的栈信息,确定函数调用过程 ---- Good
come from :https://www.cnblogs.com/lifexy/p/8011966.html在上章里,我们分析了oops的PC值在哪个函数出错的本章便通过栈信息来分析函数调用过程1.上章的oops栈信息如下图所示:9fe0:代表最初的栈顶SP寄存器位置 9e80:代表函数出错的SP寄存器位置2.我们先来分析上图的栈信息,又是怎样的过程呢?...转载 2019-03-05 22:28:52 · 288 阅读 · 0 评论 -
36.Linux驱动调试-根据oops定位错误代码行 --------- Good
come from :https://www.cnblogs.com/lifexy/p/8006748.html1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来1.1以LED驱动为例将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示:1.2然后编译装载26th_segmentfault并执行测试程序后,内核便...转载 2019-03-05 22:27:38 · 876 阅读 · 0 评论 -
35.Linux-分析并制作环形缓冲区 --------- Good
come from :https://www.cnblogs.com/lifexy/p/8000515.html在上章34.Linux-printk分析、使用printk调试驱动里讲述了: printk()会将打印信息存在内核的环形缓冲区log_buf[]里,可以通过dmesg命令来查看log_buf[]1.环形缓冲区log_buf[]又是存在内核的哪个文件呢?位于/p...转载 2019-03-05 22:26:37 · 325 阅读 · 0 评论 -
34.Linux-printk分析、使用__FILE__, __FUNCTION__, __LINE__ 调试 -------Good
come from :https://www.cnblogs.com/lifexy/p/7993136.html本节学习目的1)分析printk()函数 2)使用printk()调试驱动1.在驱动调试中,使用printk(),是最简单,最方便的办法当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上当uboot的命令行里的...转载 2019-03-05 22:21:48 · 495 阅读 · 0 评论 -
在linux kernel中打印函数调用的堆栈的方法
come from :https://blog.csdn.net/qq_43761970/article/details/84337292在linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入:dump_stack();或 __backtrace();即可。dump_stack()在~/kernel/lib/Dump_stack.c中...转载 2019-03-25 10:57:45 · 1564 阅读 · 0 评论