第10章嵌入式Linux的调试技术
心得体会
这一章主要概括的介绍了嵌入式Linux的调试技术的主要内容。通过对第10章的学习,使我对嵌入式Linux的调试技术的方法以及操作步骤有了一个基本的认识。
一 调试前的准备
在调试一个bug之前,我们所要做的准备工作有:
有一个被确认的bug。
包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助。可以采用二分查找法来逐步锁定bug引入版本号。
对内核代码理解越深刻越好,同时还需要一点点运气。
该bug可以复现。如果能够找到复现规律,那么离找到问题的原因就不远了。
最小化系统。把可能产生bug的因素逐一排除掉。
二 内核中的bug
内核中的bug也是多种多样的。它们的产生有无数的原因,同时表象也变化多端。从隐藏在源代码中的错误到展现在目击者面前的bug,其发作往往是一系列连锁反应的事件才可能出发的。虽然内核调试有一定的困难,但是通过你的努力和理解,说不定你会喜欢上这样的挑战。
三 内核调试配置选项
学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商通常会禁止发行版内核中的调试功能。
四 引发bug并打印信息
1 一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。
2 dump_stack(),有些时候,只需要在终端上打印一下栈的回溯信息来帮助你调试。这时可以使用dump_stack()。
五 printk()
内核提供的格式化打印函数。
六 内存调试工具
1 MEMWATCH 2 YAMD 3 Electric Fence
七 strace
strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。
八 OOPS
OOPS(也称 Panic)消息包含系统错误的细节…
九 KGDB
kgdb提供了一种使用 gdb调试 Linux 内核的机制。使用KGDB可以象调试普通的应用程序那样,在内核中进行设置断点、检查变量值、单步跟踪程序运行等操作。
http://www.cnblogs.com/yun123456/