为了方便进行Linux设备驱动的开发和调试,建立良好的开发环境很重要,还要使用必要的工具软件以及掌握常用的调试技巧等。
1、Linux下调试器GDB的基本用法和技巧。
2、Linux内核的调试方法。
3、Linux内核调试用的printk()、BUG_ON()、WARN_ON()、/proc、Oops、strace、KGDB,以及使用仿真器进行调试的方法。
4、Linux应用程序的调试方法,驱动工程师需要编写用户空间的应用程序以对自身编写的驱动进行验证和测试,因此,掌握应用程序调试方法对驱动工程师来说也是必需的。
5、Linux常用的一些稳定性、性能分析和调优工具。
21.1 GDB调试器的用法
21.1.1 GDB的基本用法
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要完成下面4个方面的功能。
启动程序,可以按照工程师自定义的要求运行程序。
让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式。
当程序被停住时,可以检查此时程序中所发生的事,并追踪上文。
动态地改变程序的执行环境。
不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,都必须掌握GDB的用法。而且,在调试内核和调试应用程序时使用的GDB命令是完全相同的,以代码清单21.1的应用程序为例演示GDB调试器的用法。
代码清单21.1 GDB调试器用法的演示程序(gdb_example.c)
#include <stdio.h>
int add(int a, int b)
{
return (a + b);
}
int main(void)
{
int sum[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int i;
int array1[10] = {48, 56, 77, 33, 33, 11, 226, 544, 78, 90 };
int array2[10] = {85, 99, 66, 199, 393, 11, 1, 2, 3, 4};
for (i = 0; i < 10; i++)
{
sum[i] = add(array1[i], array2[i]);
printf("sum[%d] = %d\n", i, sum[i]);
}
return 0;
}
使用命令gcc -g gdb_example.c -o gdb_example编译上述程序,得到包含调试信息的二进制文件gdb_example,执行gdb gdb_example命令进入调试状态,如下所示:

1.list命令
在GDB中运行list命令(缩写l)可以列出代码,list的具体形式如下。
list<linenum>,显示程序第linenum行周围的源程序,如下所示:
list <function>,显示函数名为function的函数的源程序,如下所示: