首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Mips GNU工具链简介(3)

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 ASGNU汇编器,主要用于把汇编代码转换成二进制代码,并存放到一个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用来指明源文件的格式,bfdnameBFD库中描述的标准格式名,如果没指明,objcopy自己分析
-O bfdname 输出的格式
-F bfdname 同时指明源文件,目的文件的格式
-R sectionname 从输出文件中删除掉所有名为sectionname的段
-S 不从源文件中复制重定位信息和符号信息到目标文件中
-g 不从源文件中复制调试符号到目标文件中



Objcopy
的使用实例:
objcopy -I binary -O elf32-i386 -B i386 inputfile outputfile
继承事业,薪火相传
返回列表