LDD3学习笔记(7):调试技术

1、内核中的调试

开发中需要激活的配置选项

CONFIG_DEBUG_KERNEL

CONFIG_DEBUG_SLAB

CONFIG_DEBUG_PAGEALLOC

CONFIG_DEBUG_SPINLOCK

CONFIG_DEBUG_SPINLOCK_SLEEP

CONFIG_INIT_DEBUG

CONFIG_DEBUG_INFO

CONFIG_MAGIC_SYSRQ

CONFIG_DEBUG_STACKOVERFLOW

CONFIG_DEBUG_STACK_USAGE

CONFIG_KALLSYMS

CONFIG_IKCONFIG

CONFIG_IKCONFIG_PROC

CONFIG_ACPI_DEBUG

CONFIG_DEBUG_DRIVER

CONFIG_SCSI_CONSTANTS

CONFIG_INPUT_EVBUG

CONFIG_PROFILING

2、用打印调试

最常用的调试技术是监视,在程序的适当地方调用printk

Printk允许你根据消息的严重程度不同进行分类。

printk(KERN_DEBUG"HereIam:%s:%i\n",__FILE__,__LINE__);//调试信息

printk(KERN_CRIT"I'mtrashed;givingupon%p\n",ptr);//紧急信息

一共有八种情况等级:

KERN_EMERG

用于紧急消息,常常是那些崩溃前的消息.

KERN_ALERT

需要立刻动作的情形.

KERN_CRIT

严重情况,常常与严重的硬件或者软件失效有关.

KERN_ERR

用来报告错误情况;设备驱动常常使用KERN_ERR来报告硬件故障.

KERN_WARNING

有问题的情况的警告,这些情况自己不会引起系统的严重问题.

KERN_NOTICE

正常情况,但是仍然值得注意.在这个级别一些安全相关的情况会报告

KERN_INFO

信息型消息.在这个级别,很多驱动在启动时打印它们发现的硬件的信息.

KERN_DEBUG

用作调试消息

没有指定优先级的printk语句默认是DEFAULT_MESSAGE_LOGLEVELKERN_WARNING

根据记录级别,内核打印的消息可能输出的位置不同。

可以修改内核消息的级别,使内核消息出现在控制台:

Echo8>/proc/sys/kernel/printk

3、用查询来调试

虽然使用printk很方便,但大量使用printk会拖慢系统。

/proc文件系统是一个特殊的软件创建的文件系统,用来将内核的消息输出到外界,/proc下的每个文件都绑定到一个内核函数上。

4、使用查询来调试

strace命令时一个有力工具,显示所有的用户空间程序发出的系统调用.它不仅显示调用,还以符号

形式显示调用的参数和返回值.当一个系统调用失败,错误的符号值(例如,ENOMEM)和对应的字

(Outofmemory)都显示.strace有很多命令行选项;其中最有用的是-t来显示每个调用执行的时

,-T来显示调用中花费的时间,-e来限制被跟踪调用的类型,以及-o来重定向输出到一个文件.

省地,strace打印调用信息到stderr

使用命令:stracels/dev>/dev/scull0

5、调试系统故障

即便你已使用了所有的监视和调试技术,有时故障还留在驱动里,当驱动执行时系统出错.当发生这个时,能够收集尽可能多的信息来解决问题是重要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值