.在内核里发生错误,可以调用dump_stack();来输出call trace 信息;show_regs()可以打印寄存器信息。
.splint检查C代码的缺陷,valgrind可以检查程序内存使用错误。
.gcc中的-g 和 -O2是可以共存的。
.msh的不支持的shell 特性:
.不支持shell变量 加"{}"括起,会提示“unclosed {”。变量比较必须要用双引号括起,例如
if [ "$TEST" = "1" ]; then
.不支持变量直接运算,例如:DEVCOUNT=$((DEVCOUNT + 1)),应该用expr命令: DEVCOUNT=`expr $DEVCOUNT + 1`,注意空格。
.出现“not found”错误,可以检查是不是误用了DOS格式存储脚本文件。
. sh -x 脚本名 可以查看每一步脚本的执行结果,方便调试脚本。
.linux下使用forkpty()可以重定向子进程的输出;popen()也可以实现。
.Atheros的无线驱动可以用wlanconfig wl0 list查看连接的站点列表。
.linux下用size命令可以看到可执行文件各个段的大小,例如:
[heym@jupiter ulimit]$ size ulimit
text data bss dec hex filename
1370 272 4 1646 66e ulimit
./proc/process_id/maps可以看到一个进程的内存映像。
.通过mount -t sysfs none /sys 可以挂载内核的sysfs文件系统;/sys/modules/下面有所有已经装入的模块的信息,包括装入地址等;
.gdb中可以通过命令: l *0x地址 来查看该地址所在的源码, gdb的info命令也可以,或者是用addr2line命令;
.ar -t libxxx.a 可以看到libxxx.a中链接的.o文件列表;objdump -t libxxx.a或者objdump -T libxxx.so不仅可以看到链接的.o文件
还可以看到每个.o文件所包含的符号;