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

简介:  1、内核中的调试开发中需要激活的配置选项CONFIG_DEBUG_KERNELCONFIG_DEBUG_SLABCONFIG_DEBUG_PAGEALLOCCONFIG_DEBUG_SPINLOCKCONFIG_DEBUG_SPINL...
 

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 "Here I am: %s:%i\n", __FILE__, __LINE__);   //调试信息

printk(KERN_CRIT "I'm trashed; giving up on %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

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

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

Echo 8 > /proc/sys/kernel/printk

3、用查询来调试

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

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

4、使用查询来调试

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

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

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

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

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

使用命令: strace ls /dev > /dev/scull0 

5、调试系统故障

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

目录
相关文章
|
8月前
|
NoSQL 编译器 C语言
【GDB调试技巧】提高gdb的调试效率
【GDB调试技巧】提高gdb的调试效率
98 1
|
8月前
|
NoSQL Shell 程序员
【C/C++ 调试 GDB指南 】GDB调试工具介绍:从基础到高级
【C/C++ 调试 GDB指南 】GDB调试工具介绍:从基础到高级
502 0
|
8月前
|
NoSQL Linux Android开发
OPENJTAG调试学习(三):使用 gdb 命令行进行调试
OPENJTAG调试学习(三):使用 gdb 命令行进行调试
130 0
|
NoSQL Ubuntu IDE
嵌入式Linux系列第14篇:使用gdb和gdbserver构建在线调试环境
嵌入式Linux系列第14篇:使用gdb和gdbserver构建在线调试环境
|
NoSQL 安全 开发工具
乐动ld06激光雷达sdk改bug记录分享
乐动ld06激光雷达sdk改bug记录分享
241 0
乐动ld06激光雷达sdk改bug记录分享
|
NoSQL IDE Shell
【Linux】【Shell】常用调试手段一览
【Linux】【Shell】常用调试手段一览
343 0
|
监控 NoSQL IDE
ROS在线调试(使用GDB)
ROS在线调试(使用GDB)
1040 0
ROS在线调试(使用GDB)
|
NoSQL
[PWN][进阶篇]使用GDB附加调试64位程序(上)
[PWN][进阶篇]使用GDB附加调试64位程序
541 0
[PWN][进阶篇]使用GDB附加调试64位程序(上)
|
NoSQL Shell
[PWN][进阶篇]使用GDB附加调试64位程序(下)
[PWN][进阶篇]使用GDB附加调试64位程序
264 0
[PWN][进阶篇]使用GDB附加调试64位程序(下)
|
NoSQL Java Linux
JNI 调试技术
如果你像我一样是一个 Java 程序员,并且经常进行 JNI 代码的开发,那么你一定也体会到了调试 JNI 代码的困难,比如有一天突然程序意外崩溃了,我们很难搞清楚它到底是因为什么崩溃的。接下来我要介绍的这几个技术,可以帮助我们快速的解决上述问题。

热门文章

最新文章