调试技术-1

来源:互联网 发布:手机淘宝2017旧版本 编辑:程序博客网 时间:2024/05/17 22:31
  中午看完了第三章,并且调试了scull。感觉还可以。
  但是开始第四章之后,头又大了。自己还是喜欢纯代码的东西。但是调试这里必须过,这是我给自己定的目标,“每天前进一点点,哪怕只有两页,也要一步步的把这本书啃完。”所以,今天的调试必须要写些东西。

第一、首先应该打开内核中的调试支持。看书上所讲应该是在编译内核,“make menuconfig”命令出现的裁减内核界面进行这些操作。可是我打开我的2.6.26.5确发现有些东西没有。
   //经过在qq群中问,没人答复。后来自己google,找到了一个好东西,原来在kernel hacking中都不叫这些名字,这部分内容可以看我资源中(http://download.csdn.net/user/hemoparrot)的资料《linux调试技术》

   找到这个资料进入之后原来调试技术也不是那么难了.整理如下:
1. 首先需要打开内核中的调试支持,如上。
2. 通过打印调试信息调试,使用printk,和在应用程序中使用printf是一样的道理。printk有8个输出级别,可在文件"/proc/sys/kernel/printk"中得到上次日志级别,默认日志级别,最小允许级别和引导时的默认日志级别四个数字。
3. 重定向控制台
/********************************************************
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h> //STDIN_FILENO
int main(int argc,char **argv)
{
    char bytes[2]={11,0};//11是TIOCLINUX的命令编号
    if(argc==2)
        bytes[1]=atoi(argv[1]);//选定的控制台
    else
    {
        fprintf(stderr,"%s:need a single arg/n",argv[0]);
        exit(1);
    }
    if(ioctl(STDIN_FILENO,TIOCLINUX,bytes)<0)
    { //使用stdin
        fprintf(stderr,"%s: ioctl(stdin,TIOCLINUX):%s/n",argv[0],strerror(errno));
        exit(1);
    }
    exit(0);
}
//错误,找不到TIOCLINUX
*********************************************************/
4. 开启关闭消息,使用宏
5. 限制速度,因为输出调试信息也需要占用资源
6. 打印设备编号,使用如下宏,可将设备编号输出到指定的内存空间中:
  #include <kdev_t.h>
  int print_dev_t(char *buffer,dev_t dev);  //返回打印的字符数
  char *format_dev_t(char *buffer,dev_t dev);  //返回的是设备编号,方便直接使用 
7. 使用/proc文件系统
...等等还有好多,今天先不看了。