标题:
Mips GNU工具链简介(3)
[打印本页]
作者:
yuyang911220
时间:
2015-11-22 19:29
标题:
Mips GNU工具链简介(3)
mips-linux-gnu-gprof:
打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。
Gprof
的原理就是在加上
-pg
选项上,在编译和链接的时候,编译器在每个函数中都加入了一个名为
gcount
的函数,每个运行函数都会调用它,用来在内存中生成函数调用图。非常有用的一个工具,这里只是一个皮毛,等下次深入分析它的线程。
Gporf
参数简介
:
-p
得到每个函数占用的执行时间
-q
得到
call graph
,包含了每个函数的调用关系,调用次数,执行时间等信息
-A
得到一个带注释的
“
源代码清单
”
,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加
-g
选项。
Gprof
使用实例
:
dyron@harris-desktop:~/misc/module/test/tmp$ gcc -pg a.c -o filt
dyron@harris-desktop:~/misc/module/test/tmp$ gprof -b filt gmon.out
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
%
cumulative
self
self
total
time
seconds
seconds
calls
Ts/call
Ts/call
name
0.00
0.00
0.00
1
0.00
0.00
a
0.00
0.00
0.00
1
0.00
0.00
b
0.00
0.00
0.00
1
0.00
0.00
c
Call graph
granularity: each sample hit covers 4 byte(s) no time propagated
index % time
self
children
called
name
0.00
0.00
1/1
b [2]
[1]
0.0
0.00
0.00
1
a [1]
-----------------------------------------------
0.00
0.00
1/1
main [7]
[2]
0.0
0.00
0.00
1
b [2]
0.00
0.00
1/1
c [3]
0.00
0.00
1/1
a [1]
-----------------------------------------------
0.00
0.00
1/1
b [2]
[3]
0.0
0.00
0.00
1
c [3]
-----------------------------------------------
Index by function name
[1] a
[2] b
[3] c
mips-linux-gnu-size
:
显示一个目标文件或者链接库文件中的目标文件的各个段的大小。
Size
的参数简介
:
-A –B:
选择以
sysv|berkeley
的样式输出。
-o|-d|-x :
选择输出数据的格式
.
-t :
选择全部输出。
Size
的使用实例
:
[tulip]dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-size filt
text
data
bss
dec
hex filename
1477
280
12
1769
6e9 filt
mips-linux-gnu-as:
GNU AS
是
GNU
汇编器,主要用于把汇编代码转换成二进制代码,并存放到一个
object
文件中。
大家都知道从源码到程序分为
4
个过程,
AS
做的工作就是第
3
步,将汇编指令码转换为二进制的文件。
As
的使用实例
(
可用
gcc-c hello.s –o hello.o
代替
)
:
Mips-linux-gnu-as hello.s –o hello.o
mips-linux-gnu-strings:
strings
的功参简单,就是显示文件中的可打印字符,
常用来在
二进制
文件中查找字符串。
Strings
的参数简介
:
-a
不只是扫描目标文件初始化和装载段
,
而是扫描整个文件
.
-f
在显示字符串之前先显示文件名
.
-n min-len
打印至少
min-len
字符长的字符串
.
默认的是
4.
-t {o,x,d}
在字符串前面显示其在文件中的偏移量
.
选项中的单个字符指定偏移量的进制是八进制
,
十六进制,还是十进制
.
--target=bfdname
指定一种目标代码格式来代替你的系统的默认格式
.
Strings
的使用实例
:
[tulip]dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-strings /usr/bin/uptime
//
将会显示
uptime
中的字符串,
默认是以
4
的最少长度。
mips-linux-gnu-objcopy:
可以将一种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。
它使用
GNU BFD(binary format description)
库读
/
写目标文件,通过这个
BFD
库,
objcopy
能以一种不同于源目标文件的格式生成新的目标文件
Objcopy
命令的常用参数
(
太有用的命令了,参数一大堆
):
-I bfdname
或
—input-target=bfdname
用来指明源文件的格式
,bfdname
是
BFD
库中描述的标准格式名
,
如果没指明
,
则
objcopy
自己分析
-O bfdname
输出的格式
-F bfdname
同时指明源文件
,
目的文件的格式
-R sectionname
从输出文件中删除掉所有名为
sectionname
的段
-S
不从源文件中复制重定位信息和符号信息到目标文件中
-g
不从源文件中复制调试符号到目标文件中
Objcopy
的使用实例
:
objcopy -I binary -O elf32-i386 -B i386 inputfile outputfile
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0