• 遇到进程卡死,没有gdb 符号表;只能strace 跟踪处理分析

排查过程:

1、ps -aux 查看卡死进程pid

2、strace -T -tt -e trace=all -p 查看卡死进程系统调用信息  

  此时卡在read 系统调用上, read 的第一个参数为句柄

3、ls -l  /proc/pid/fd

可以看到fd的指向的是哪个socket 或者文件以及innode

4、cat  /proc/net/tcp 可以查看inode 信息

5、lsof 查看文件相关信息

就可以根据fd 找到对应的连接

  1. dynamic debug动态打印
  2. printk_once , 只打印一次。
  3.  
  4. 有些情况下,需要kernel运行时动态打印与否,dynamic debug就派上用场了。
  5.  
  6. 具体用法可以参考: kernel/Documentationdynamic-debug-howto.txt
  7.  
  8. 使用步骤:
  9.  
  10. // 打印
  11.  
  12. echo 'file nand.c line 4210 +p' > /sys/kernel/debug/dynamic_debug/control
  13.  
  14. // 不打印
  15. echo 'file nand.c line 4210 -p' > /sys/kernel/debug/dynamic_debug/control
  16.  
  17. // 使用例子
  18.  
  19. pr_debug(" dynamic debug \n");

kprobe:

  1. * specify pre_handler address
  2. */
  3. kp.pre_handler=handler_pre;
  4. /* specify post_handler address
  5. */
  6. kp.post_handler=handler_post;
  7. /* specify fault_handler address
  8. */
  9. kp.fault_handler=handler_fault;
  10. /* specify the address/offset where you want to insert probe.
  11. * You can get the address using one of the methods described above.
  12. */
  13. kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("do_fork");
  14. /* check if the kallsyms_lookup_name() returned the correct value.
  15. */
  16. if (kp.add == NULL) {
  17. printk("kallsyms_lookup_name could not find address
  18. for the specified symbol name\n");
  19. return 1;
  20. }
  21. /* or specify address directly.
  22. * $grep "do_fork" /usr/src/linux/System.map
  23. * or
  24. * $cat /proc/kallsyms |grep do_fork
  25. * or
  26. * $nm vmlinuz |grep do_fork
  27. */
  28. kp.addr = (kprobe_opcode_t *) 0xc01441d0;
  29. /* All set to register with Kprobes
  30. */
  31. register_kprobe(&kp);
  32.  
  33. 然后在 init_moudle 中注册的探测器

Kprobes 的好处有很多。不需要重新编译和重新引导内核就可以插入 printk。为了进行调试可以记录 处理器寄存器的日志,甚至进行修改 —— 不会干扰系统。类似地,同样可以无干扰地记录 Linux 内核数据结构的日志,甚至 进行修改

linux kernel 的 procfs sysfs 对查问题的帮助的更多相关文章

  1. (转)Linux 文件系统:procfs, sysfs, debugfs 用法简介

    网址:http://www.tinylab.org/show-the-usage-of-procfs-sysfs-debugfs/ 1 前言 内核中有三个常用的伪文件系统:procfs,debugfs ...

  2. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  3. 编译linux kernel及制作initrd ( by quqi99 )

    编译linux kernel及制作initrd ( by quqi99 ) 作者:张华  发表于:2013-01-27    ( http://blog.csdn.net/quqi99 ) 运行一个l ...

  4. Linux Kernel - Debug Guide (Linux内核调试指南 )

    http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...

  5. Linux Kernel代码艺术——系统调用宏定义

    我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...

  6. Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State

    目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...

  7. Linux Kernel CMPXCHG函数分析

    原文地址:http://blog.csdn.net/penngrove/article/details/44175387 最近看到Linux Kernel cmpxchg的代码,对实现很不理解.上网查 ...

  8. Linux kernel scriptes bin2c "\x"

    /**************************************************************************** * Linux kernel scripte ...

  9. Linux Kernel Schduler History And Centos7.2's Kernel Resource Analysis

    本文分为概述.历史.el7.2代码架构图解三部分. 解决的问题: a.Kernel调度发展过程: b.以架构图的方式,详解el7.2具体调度实现.内核线程模型.调度时间片计算,以及探究整个Kernel ...

随机推荐

  1. Python数据类型---数值类型

    一.整数(Integer)简称Int,又称整型,由正整数.负整数.0构成,不包括小数,分数. a,b=1,2 #一种赋值方法,此时a=1,b=2 print(a+b) #加法 3 print(a-b) ...

  2. 2014年 实验二 B2C网上购物

    实验二 B2C网上购物 [实验目的] ⑴.熟悉虚拟银行和网上支付的应用 ⑵.熟悉并掌握消费者B2C网上购物和商家的销售处理 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网 (3) ...

  3. 多测师讲解html _段落标签002_高级讲师肖sir

    <html> <head> <meta charset="UTF-8"> <title>段落标签</title> < ...

  4. Celery---一个懂得异步任务,延时任务,周期任务的芹菜

    Celery是什么? celey是芹菜 celery是基于Python实现的模块,用于执行异步延时周期任务的 其结构组成是由 1.用户任务 app 2.管道任务broker用于存储任务 官方推荐red ...

  5. 程序员,想被别人发掘?那你有 freestyle 吗?

    程序员群体是偏内向的,整天和计算机打交道,用代码说话,接受任务,默默工作. 如果这些任务是有挑战性的还行,你的工作成果就能帮你说话,可是大部分工作都是普普通通的,甚至有点儿重复性的劳动. 这个时候表面 ...

  6. asp.net 获取网站根目录总结 Global.asax文件里获取获取网站根目录

    1:  获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"])Server.MapPath(&qu ...

  7. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

  8. C++实现求离散数学命题公式的真值表

    一.实验内容 (1)求任意一个命题公式的真值表. (2)利用真值表求任意一个命题公式的主范式. (3)利用真值表进行逻辑推理. 注:(2)和(3)可在(1)的基础上完成. 二.实验目的 真值表是命题逻 ...

  9. apktool的下载,安装,反编译和重新打包

    一.环境要求 安装java 1.8 以上 命令行运行 java -version 返回版本大于1.8 如果没有,请安装java 1.8 二.下载与安装 下载apktool_x.x.x.jar到本地 官 ...

  10. LruCache缓存bitmap(一)

    Lrucache是把图片缓存到内置sd卡,设置缓存容量为系统分配容量的八分之一,单位byte,超过缓存容量gc会自动回收不长使用的缓存.觉得lrucache就先map一样,放入键值对就行了,比较方便, ...