调试技术-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文件系统
...等等还有好多,今天先不看了。
但是开始第四章之后,头又大了。自己还是喜欢纯代码的东西。但是调试这里必须过,这是我给自己定的目标,“每天前进一点点,哪怕只有两页,也要一步步的把这本书啃完。”所以,今天的调试必须要写些东西。
第一、首先应该打开内核中的调试支持。看书上所讲应该是在编译内核,“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文件系统
...等等还有好多,今天先不看了。
- 调试技术-1
- gdb调试技术1
- 掌握 Linux 调试技术(1)
- 内核编程调试技术(1)
- 调试技术
- 调试技术
- 调试技术
- 调试技术
- 调试技术
- 调试技术
- 调试技术
- Linux设备驱动调试技术 1
- Linux设备驱动调试技术 1
- 掌握 Linux 调试技术
- 掌握 Linux 调试技术
- C++ Builder调试技术
- 掌握 Linux 调试技术
- VC程序调试技术
- MyEclipse7.0 M1下载+汉化+注册码
- 史上最强的面试
- Slab对象数量计算函数
- 柳传志:管理联想电脑我不如元庆
- Windows调试工具入门3—基本调试操作
- 调试技术-1
- JSP中验证码的使用
- 安装任何软件都提示不能访问windows Installer服务
- 从水浒看二把手的生存之道
- Ext应用教程
- loadrunner脚本无法保存
- 我的投诉
- asp.net javascript 阻止提交页面
- 安全测试的一般方法