软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 研发管理 -> 我的openwrt学习笔记(十九):linux便捷开发命令之strace -> 正文阅读

[研发管理]我的openwrt学习笔记(十九):linux便捷开发命令之strace


                        我的openwrt学习笔记(十九):linux便捷开发命令之strace
         学习linux命令的是LINUX 的基础,相信很多人N多年前就知道这个命令,学习额时候也用过它,但是久而久之这个命令就淡出了我们的视野!在实际的工作中有时候会遗忘它,终其主要原因是字实际应用中运用的不够多!
   今天介绍个特别有用的命令,strace,可以跟踪程序的执行调用过程,它可以给你提供程序执行错误的相关信息!
1.

linux@ubuntu:~$ which strace
/usr/bin/strace
linux@ubuntu:~$ strace -V
strace -- version 4.5.20
linux@ubuntu:~$ strace -v
usage: strace [-dffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file]
              [-p pid] ... [-s strsize] [-u username] [-E var=val] ...
              [command [arg ...]]
   or: strace -c -D [-e expr] ... [-O overhead] [-S sortby] [-E var=val] ...
              [command [arg ...]]
-c -- count time, calls, and errors for each syscall and report summary
-f -- follow forks, -ff -- with output into separate files
-F -- attempt to follow vforks, -h -- print help message
-i -- print instruction pointer at time of syscall
-q -- suppress messages about attaching, detaching, etc.
-r -- print relative timestamp, -t -- absolute timestamp, -tt -- with usecs
-T -- print time spent in each syscall, -V -- print version
-v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args
-x -- print non-ascii strings in hex, -xx -- print all strings in hex
-a column -- alignment COLUMN for printing syscall results (default 40)
-e expr -- a qualifying expression: option=[!]all or option=[!]val1[,val2]...
   options: trace, abbrev, verbose, raw, signal, read, or write
-o file -- send trace output to FILE instead of stderr
-O overhead -- set overhead for tracing syscalls to OVERHEAD usecs
-p pid -- trace process with process id PID, may be repeated
-D -- run tracer process as a detached grandchild, not as parent
-s strsize -- limit length of print strings to STRSIZE chars (default 32)
-S sortby -- sort syscall counts by: time, calls, name, nothing (default time)
-u username -- run command as username handling setuid and/or setgid
-E var=val -- put var=val in the environment for command
-E var -- remove var from the environment for command

 

 

2.

Test.c代码
#include <stdio.h>
 
 
int main(void)
{
        printf("hi,strace test 20150814\n");
        return 0;
}

linux@ubuntu:~/linux_c$ touch test.c
linux@ubuntu:~/linux_c$ vi test.c
linux@ubuntu:~/linux_c$ gcc -g test.c
linux@ubuntu:~/linux_c$ ./a.out
hi,strace test 20150814
linux@ubuntu:~/linux_c$ strace a.out
strace: a.out: command not found
linux@ubuntu:~/linux_c$ strace ./a.out
execve("./a.out", ["./a.out"], [/* 37 vars */]) = 0
brk(0)                                  = 0x9a21000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7782000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=74329, ...}) = 0
mmap2(NULL, 74329, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb776f000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\226\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1713640, ...}) = 0
mmap2(NULL, 1723100, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb75ca000
mmap2(0xb7769000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19f) = 0xb7769000
mmap2(0xb776c000, 10972, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb776c000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb75c9000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb75c9900, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7769000, 8192, PROT_READ)   = 0
mprotect(0x8049000, 4096, PROT_READ)    = 0
mprotect(0xb77a5000, 4096, PROT_READ)   = 0
munmap(0xb776f000, 74329)               = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7781000
write(1, "hi,strace test 20150814\n", 24hi,strace test 20150814
) = 24
exit_group(0)                           = ?
linux@ubuntu:~/linux_c$

 

 
3.
strace案例
用strace调试程序例子
http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html
http://www.cnblogs.com/bangerlee/archive/2012/02/20/2356818.html
http://jingyan.baidu.com/article/a3761b2bb92d2d1576f9aa05.html
4.
编译strace  ,最新版strace-4.10
 
http://sourceforge.net/projects/strace/
 
编译
授人以鱼不如授人以渔
先看readme 提示编译安装查看 install文件
 

linux@ubuntu:~/linux_c/strace-4.10$ ./configure --help
`configure' configures strace 4.10 to adapt to many kinds of systems.
 
Usage: ./configure [OPTION]... [VAR=VALUE]...

linux@ubuntu:~/linux_c/strace-4.10$ ./configure -V
strace configure 4.10
generated by GNU Autoconf 2.69
 
Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.

 

generated by GNU Autoconf 2.69
别小看这句话,这句话告诉你configure是按照Autoconf库创建出来的,有标准通用参数
如以下:

linux@ubuntu:~/linux_c/strace-4.10$ ./configure CC=/usr/bin/gcc
linux@ubuntu:~/linux_c/strace-4.10$ make
.o strace-utimes.o strace-v4l2.o strace-vsprintf.o strace-wait.o strace-xattr.o  
make[2]: Leaving directory `/home/linux/linux_c/strace-4.10'
make[1]: Leaving directory `/home/linux/linux_c/strace-4.10'
linux@ubuntu:~/linux_c/strace-4.10$ make install
make  install-recursive
make[1]: Entering directory `/home/linux/linux_c/strace-4.10'
Making install in tests
make[2]: Entering directory `/home/linux/linux_c/strace-4.10/tests'
make[3]: Entering directory `/home/linux/linux_c/strace-4.10/tests'
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/home/linux/linux_c/strace-4.10/tests'
make[2]: Leaving directory `/home/linux/linux_c/strace-4.10/tests'
make[2]: Entering directory `/home/linux/linux_c/strace-4.10'
make[3]: Entering directory `/home/linux/linux_c/strace-4.10'
 /bin/mkdir -p '/usr/local/bin'
  /usr/bin/install -c strace '/usr/local/bin'
/usr/bin/install: cannot create regular file `/usr/local/bin/strace': Permission denied
make[3]: *** [install-binPROGRAMS] Error 1
make[3]: Leaving directory `/home/linux/linux_c/strace-4.10'
make[2]: *** [install-am] Error 2
make[2]: Leaving directory `/home/linux/linux_c/strace-4.10'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/home/linux/linux_c/strace-4.10'
make: *** [install] Error 2
linux@ubuntu:~/linux_c/strace-4.10$ file strace
strace: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x06f3c3b4e130a4374122afc287fb62d41ce3f644, not stripped

 
 
 Openwrt编译mips –el 编译器
 

 

linux@ubuntu:~/mt7688/openwrt-3.10.14/bin/ramips$ ls -l
total 49040
-rw-r--r-- 1 linux linux      360 Aug 14 16:41 md5sums
-rw-r--r-- 1 linux linux  3407876 Aug 14 16:41 openwrt-ramips-mt7628-mt7628-squashfs-sysupgrade.bin
-rw-r--r-- 1 linux linux  1966080 Aug 14 16:41 openwrt-ramips-mt7628-root.squashfs
-rw-r--r-- 1 linux linux  1267526 Aug 14 16:41 openwrt-ramips-mt7628-uImage.bin
-rwxr-xr-x 1 linux linux  3750544 Aug 14 16:41 openwrt-ramips-mt7628-vmlinux.bin
-rwxr-xr-x 1 linux linux  3816984 Aug 14 16:41 openwrt-ramips-mt7628-vmlinux.elf
-rw-r--r-- 1 linux linux 36051998 Aug 14 16:42 OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2
drwxr-xr-x 5 linux linux     4096 Aug  7 16:39 packages
linux@ubuntu:~/mt7688/openwrt-3.10.14/bin/ramips$ pwd
/home/linux/mt7688/openwrt-3.10.14/bin/ramips
所以可见编译好后  工具链存放于/home/linux/mt7688/openwrt-3.10.14/bin/ramips
 
Mips工具链安装
解压工具链~/app
linux@ubuntu:~/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin$
 
 
 
linux@ubuntu:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
linux@ubuntu:~$ vi /etc/environment
linux@ubuntu:~$ sudo chmod 777 /etc/environment
[sudo] password for linux:
linux@ubuntu:~$ vi /etc/environment
linux@ubuntu:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
linux@ubuntu:~$ source /etc/environment
linux@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin
 
linux@ubuntu:~/linux_c$ mipsel-openwrt-linux-gcc -g test.c
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
linux@ubuntu:~/linux_c$ ls -l
total 612
-rwxrwxr-x  1 linux linux   6938 Aug 14 16:51 a.out
drwxr-xr-x 11 linux linux  12288 Aug 14 16:32 strace-4.10
-rw-rw-r--  1 linux linux 601856 Aug 14 16:18 strace-4.10.tar.xz
-rw-rw-r--  1 linux linux     89 Aug 14 16:01 test.c
linux@ubuntu:~/linux_c$ file a.out
a.       out: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x3040000, not stripped
 
http://blog.csdn.net/flymachine/article/details/7055923 
如何交叉编译strace工具
strace mips编译器编译
linux@ubuntu:~/linux_c/strace-4.10$ ./configure --host=/home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for /home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... i686-pc-linux-gnu
checking host system type... Invalid configuration `/home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc': machine `/home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux' not recognized
configure: error: /bin/bash ./config.sub /home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc failed
、//-----------------------
linux@ubuntu:~/linux_c/strace-4.10$ ./configure CC=/home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... i686-pc-linux-uclibc
checking host system type... i686-pc-linux-uclibc
checking for gcc... /home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... configure: error: in `/home/linux/linux_c/strace-4.10':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
 
 
恩??为毛不对
linux@ubuntu:~/linux_c/strace-4.10$ ./configure --host=mipsel-openwrt-linux CC=mipsel-openwrt-linux-gcc LD=mipsel-openwrt-linux-ld
 

checking for libunwind-ptrace.h... no
checking whether to enable stack tracing support using libunwind... no
Generated MIPS syscallent stubs
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating tests/Makefile
config.status: creating tests-m32/Makefile
config.status: creating tests-mx32/Makefile
config.status: creating config.h
config.status: executing depfiles commands
 
linux@ubuntu:~/linux_c/strace-4.10$ make

e-sysmips.o strace-term.o strace-time.o strace-truncate.o strace-uid.o strace-uid16.o strace-umask.o strace-umount.o strace-uname.o strace-util.o strace-utime.o strace-utimes.o strace-v4l2.o strace-vsprintf.o strace-wait.o strace-xattr.o  
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
make[2]: Leaving directory `/home/linux/linux_c/strace-4.10'
make[1]: Leaving directory `/home/linux/linux_c/strace-4.10'
linux@ubuntu:~/linux_c/strace-4.10$ file strace
strace: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x3040000, not stripped
 
默认make生成的是动态的
tu:~/linux_c/strace-4.10$ make CFLAGS+=-static
linux@ubuntu:~/linux_c/strace-4.10$ file strace
strace: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, statically linked, with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x3040000, not stripped
 
 
linux@ubuntu:~/linux_c/strace-4.10$ cd ../
linux@ubuntu:~/linux_c$ ls -lh
total 3.0M
-rwxrwxr-x  1 linux linux 6.8K Aug 14 16:51 a.out
-rwxrwxr-x  1 linux linux  928 Aug 14 16:57 cident.sh
-rwxrwxr-x  1 linux linux  474 Aug 14 16:57 makefile
-rwxrwxr-x  1 linux linux 1.3M Aug 14 17:10 strace
drwxr-xr-x 11 linux linux  12K Aug 14 17:08 strace-4.10
-rw-rw-r--  1 linux linux 588K Aug 14 16:18 strace-4.10.tar.xz
-rwxrwxr-x  1 linux linux 1.1M Aug 14 17:08 strace.dyn
-rw-rw-r--  1 linux linux   89 Aug 14 16:01 test.c
 
生成strace静态可执行文件,1.3MB

 
 
 
Mafile 无法识别到mipsel-openwrt-linux-gcc目录,
修改PATH,从/etc/envimont
改到 ~/.bashrc
 
 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin
linux@ubuntu:~/linux_c$which mipsel-openwrt-linux-gcc
/home/linux/app/OpenWrt-Toolchain-ramips-for-mipsel_24kec+dsp-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
 
:~/linux_c$ make
mipsel-openwrt-linux-gcc  -o app.elf test.c -g -lpthread -ldl -Wall -Wimplicit-function-declaration
mipsel-openwrt-linux-uclibc-gcc.bin:warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-uclibc-gcc.bin:warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-uclibc-gcc.bin:warning: environment variable 'STAGING_DIR' not defined
linux@ubuntu:~/linux_c$file app.elf
app.elf: ELF 32-bitLSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses sharedlibs), with unknown capability 0xf41 = 0x756e6700, with unknown capability0x70100 = 0x3040000, not stripped
 
版权声明:本文为博主原创文章,未经博主允许不得转载。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2015-08-30 18:52:53  
研发管理 最新文章
拉格朗日乘数
maven之可视化项目依赖(Visualizingdepend
mac效率工具
Atitit.css规范bem项目中CSS的组织和管理
git入门
Asimplemodelfordescribingbasicsourcesofp
Linux进程管理浅析
我的openwrt学习笔记(十九):linux便捷开
2、微控制器选择
Git使用手册:为Git仓库创建Submodule
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年10日历
2017-10-19 7:44:32
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --