砖7 解bug时用到的一些小工具

整理文档

整理一下最近做的东西中,用到一些小工具。

1.   配置虚拟机串口

1.1    虚拟机添加串口

在虚拟机设置里添加串口,选择serial port type,选择output to file,这里我选的是在物理机上/vmware/目录下serialportinfo文件来保存串口信息;

1.2    在测试机端配置

不太记得了,应该需要再在测试机配置,suse操作系统,打开/boot/grub/menu.lst文件,添加console=tty0 console=ttyS0,9600。

1.3    测试是否配置成功

首先,开机启动信息是会保存在串口文件中的。

2.   物理机配置串口调试信息

物理机是配置minicom来查看调试信息。

Suse系统,当时minicom未配置成功,记录也不够仔细,以后这样的情况应该及时总结。

Minicom的一些命令:

(1)      minicom –s:进入minicom的配置界面

(2)      ctrl + A + Z:显示出所有命令;

(3)      ctrl + A + L: 保存内容到指定的文件夹下;

(4)      dmesg | grep ttyS*,如果看不到任何信息,则串口没有打开。

2.1    测试机端的配置

在测试机上,suse是在/boot/grub/menu.lst文件中添加,在指定的title

添加console=ttyS0 console=ttyS0,9600;

2.2    显示机端的配置

$minicom –s                       /*配置minicom */

serial port配置

输出文件配置,输出到屏幕同时输出到指定文件

2.3    测试是否配置成功

echo test > /dev/ttyS0,测试看是否向端口发送数据成功。

查看串口设备:dmesg | grep ttyS*,如果看不到任何信息,则串口没有打开;如果有信息,会显示console[ tty0 ] enabled。

注:这里不需要编写串口程序来调试。

3.   修改printk级别

(1)      查看printk级别

$ cat /proc/sys/kernel/printk,会显示出4个数字,分别表示当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。

(2)      希望打印出所以信息,修改printk级别

$echo 8 >/proc/sys/kernel/printk,再执行cat,第一个数字是8,表示当前控制台日志级别是8,任何小于8(即级别高的)信息都会输出并显示在终端上。

注:快速重启命令,echo b >/proc/sysrq-trigger

4.   /proc/sysrq-trigger说明

(1)      快速重启:

$ echo b > /proc/sysrq-trigger

(2)      系统崩溃,suse默认启动kdump,可以测试crashkdump,崩溃后会生成崩溃文件,一般保存在/var/crash/目录下:

$ echo s > /proc/sysrq-trigger

(3)      立即关闭计算机:

$ echo o > /proc/sysrq-trigger

(4)      导出线程状态信息:

$ echo t > /proc/sysrq-trigger

备注:显示当前堆栈信息,cat/proc/pid_num/stack。

5.   手动释放缓存

作者主要用在测试时,需要测试一些特殊情况下,/proc/sys/vm/drop_caches。

(1)      清空pagecache缓存;

$ echo 1 > /proc/sys/vm/drop_caches

(2)      清空inode和dentrycache,这里的cache是对应的hashtable缓存;

$ echo 2 > /proc/sys/vm/drop_caches

(3)      清空pagecache、inode和dentrycache;

$ echo 3 > /proc/sys/vm/drop_caches

(4)      说多缓存,简单写一下free命令:

Free是显示当前内存的使用情况,-m是以M字节来显示内存情况;

6.   df 和 du命令

df是列出当前主机上的文件系统及其使用情况;

df –T: 列出当前文件系统类型

7.   测试时的log信息

(1)      直接加printk,可以显示在屏幕上;

加printk的常用方式,

打印出函数名和行号:printk("[%s][%d]\n", __func__, __LINE__);

%pF可打印函数指针的函数名和偏移地址,%pf只打印函数指针的函数名,不打印偏移地址;

int            %d or %x

unsignedint        %u or %x

long            %ld or %lx

unsigned long        %lu or %lx

long long        %lld or %llx

unsigned longlong    %llu or %llx

size_t            %zu or %zx

ssize_t            %zd or %zx

(2)      加dprintk,需要打开rpc开关;

server端:rpcdebug -m nfsd -s all

client端:rpcdebug -m nfs -s all

(3)      dump_stack,可以打印当前内核调用堆栈;

在函数中,添加dump_stack();

需要包含头文件,#include <asm/ptrace.h>

8.   Jiffies

全局变量jiffies用来记录自系统启动以来产生的节拍的总数。一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。

jiffies类型为无符号长整型(unsignedlong),其他任何类型存放它都不正确。

9.   Vim下的多行注释和多行取消注释

多行注释:

1. 进入命令行模式,按ctrl + v进入 visualblock模式,然后按j, 或者k选中多行,把需要注释的行标记起来

2. 按大写字母I,再插入注释符,例如//

3. 按esc键就会全部注释了

 

取消多行注释:

1. 进入命令行模式,按ctrl + v进入 visualblock模式,按字母l横向选中列的个数,例如 // 需要选中2列

2. 按字母j,或者k选中注释符号

3. 按d键就可全部取消注释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值