调试

18.1准备开始

18.2内核中的bug

  1.从隐藏在源代码中的错误到展现在目击者面前的bug,往往是经历一系列连锁反应的事件才可能触发的

18.3通过打印来调试

  1.健壮性

    健壮性是printk()函数最容易让人们接受 一个特质;而且调用者连锁都不必使用

    核心硬件部分的黑客依靠此时能够工作的硬件设备与外界通信;绝大部分人对此都不会感兴趣的。

  2.日志等级

    printk()与printf()最主要区别的就是前者可以指定一个日志级别。内核根据一个级别来判断是否在终端上打印消息

    现在默认等级是kern_warning。由于这个默认值将来存在变化的可能性,所以还是应该给自己的消息指定一个记录等级。

  3.记录缓冲区

    而环形缓冲区的唯一缺点——可能会丢失消息,但是与简单性与健康性的好处相比,这点代价是值得的;

  4.syslogd和klogd

    在启动klogd的时候,可以通过指定 -c标志来改变终端的记录等级

  5.从printf()到printk()的转换

18.4oops

   如果oops在中断上下文时,内核根本无法继续,会陷并入混乱。如果oops在idle进程(pid为0)或者init进程(pid为1),结果同样的系统陷入混乱,因为内核缺了这两个重要的进程根本无法工作;内核会杀死该进程并尝试着继续执行

   1.ksymoops  oops可以说是一个经过解码的oops,内存地址都转换成了它们对应的函数,这需要调用ksymoops命令,并且还必须提供编译内核时产生的system.map

    ksymoop saved_opps.txt

   2.kallsyms

    现场已经无须使用ksymoops工具了,开发版的2.5版内内核引入了kallsyms特性,它可以通过定义于config_kallsyms配置选项启用;

18.5

   最有用的一个是sleep-inside-spinlock checking(自旋锁内睡眠选项),这些选项确实能完成不少调试工作.

   内核提供一个原子操作计数器。它可以被配置成一旦在原子操作过程中进程进入睡眠或者一些可能引起睡眠的操作。这种调试方法捕获了大量bug

18.6

   1.内核调用最常用的是bug()和bug_on();当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。这些声明会导致oops跟硬件的体系结构是相关的。可以用panic()引发更严重的错误;只需要在终端上打印一下栈的回溯信息来帮助调试;

18.7

   1.当该功能被启用的时候,无论内核处于什么状态,都可以通过特殊的组合键跟内核进行通信。

   2.输入sysrq-h获取一份可用的选项列表;sysrq-u卸载所有的文件系统,sysrq-b重启设备;

18.8

   1.gdb(有很多局限性)

    gdb_vmlinux /proc/kcore

   2.kgdb

18.9

   1用UID作为选择条件

   2使用条件变量

   3使用统计量

   4重复频率限制

18.10

   1.使用git二分搜索

   2.从记录日志到git二分查找法.

    

读书笔记(chapter18)的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  3. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  4. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  5. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  6. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  7. LOMA280保险原理读书笔记

    LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...

  8. 《3D Math Primer for Graphics and Game Development》读书笔记2

    <3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...

  9. 《3D Math Primer for Graphics and Game Development》读书笔记1

    <3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...

  10. 《More Effective C#》读书笔记

    <More Effective C#>这本书,大概是四年前看完的,但只整理了一部分读书笔记,后面有时间的话,会陆续补充的. More Effective C# :使用泛型 More Eff ...

随机推荐

  1. [Usaco2007 Jan]Balanced Lineup

    嘟嘟嘟 一道RMQ板子题,分别维护最大值和最小值,不解释. #include<cstdio> #include<iostream> #include<algorithm& ...

  2. 【转】通过blob获取图像并显示

    HTML代码: <div id="forAppend" class="demo"></div> JS代码: var eleAppend ...

  3. input输入框的光标定位的问题

    input输入框的光标定位的问题 在给input输入框赋值的时候,或者在我之前写模拟下拉框js组件的时候,时不时会碰到光标的小bug问题,比如键盘中的 上移或者下移操作,在浏览器中光标会先移到最前端, ...

  4. PHP封装curl的调用接口及常用函数

    <?php /** * @desc 封装curl的调用接口,post的请求方式 */ function doCurlPostRequest($url, $requestString, $time ...

  5. tomcat-在cmd窗口启动Tomcat

    平时,一般使用tomcat/bin/startup.bat目录在windows环境启动Tomcat,或者使用IDE配置后启动. 下面来简单介绍下如果在cmd窗口直接输入命令启动Tomcat: 1.将t ...

  6. Elasticsearch 简介

    1. 背景 Elasticsearch 在公司的使用越来越广,很多同事之前并没有接触过 Elasticsearch,所以,最近在公司准备了一次关于 Elasticsearch 的分享,整理成此文.此文 ...

  7. Exp7:网络欺诈防范

    Exp7:网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 答:同一局域网下,以及各种公共网络. 在日常生活工作中如何防范以上两攻击方法? 答: 使用最新版本的DNS服务器 ...

  8. 20155339 Exp7 网络欺诈防范

    20155339 Exp7 网络欺诈防范 .基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 当连接局域网的时候应该最容易被攻击,比如说连接了一些不清楚是什么的WiFi其实是很容易收 ...

  9. Python基础(字符串和编码)

    字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...

  10. Hadoop日记Day16---命令行运行MapReduce程序

    一.代码编写 1.1 单词统计 回顾我们以前单词统计的例子,如代码1.1所示. package counter; import java.net.URI; import org.apache.hado ...