linux代码相关的工具
来源:互联网 发布:v家歌曲知乎 编辑:程序博客网 时间:2024/06/05 15:26
函数调用关系
codeviz
http://blog.csdn.net/npy_lp/article/details/6975676
calltree
gprof, kprof
http://blog.chinaunix.net/uid-20749137-id-718762.html
graphviz
gdb & backtrace
strace
http://blog.csdn.net/zhongyhc/article/details/8909868
应用程序相关工具
1. nm
nm command can report the list of symbol in a given library
ning@pcning:~/idning-paper/src$ nm test/protocol_test.out08049f18 d _DYNAMIC08049ff4 d _GLOBAL_OFFSET_TABLE_08048dbc R _IO_stdin_used w _Jv_RegisterClasses08049f08 d __CTOR_END__08049f04 d __CTOR_LIST__08049f10 D __DTOR_END__08049f0c d __DTOR_LIST__08048ef4 r __FRAME_END__08049f14 d __JCR_END__08049f14 d __JCR_LIST__08048ede r __PRETTY_FUNCTION__.4058 U __assert_fail@@GLIBC_2.00804a024 A __bss_start0804a01c D __data_start08048d70 t __do_global_ctors_aux08048550 t __do_global_dtors_aux0804a020 D __dso_handle w __gmon_start__
2. ldd (list dynamic dependencies)
查看库依赖关系
ning@pcning:~/idning-paper/src$ ldd ./test/protocol_test.gen.out linux-gate.so.1 => (0x00fb4000) libevent-2.0.so.5 => not found libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00af5000) /lib/ld-linux.so.2 (0x00589000)
性能分析
1. gcov
gcov is a test coverage program how often each line of code executes what lines of code are actually executed and how much computing time each section of code use
使用gcov,编译时加上:-fprofile-arcs -ftest-coverage,链接时加上:-lgcov
-fprofile-arcs generate .gcda file, it contains arc transition counts, and some summary information.
-ftest-coverage generate .gcno file, it contain information to restruct the basic block graph and assign source line numbers to block.
$ gcc -fprofile-arcs -ftest-coverage tmp.c$ ./a.out$ gcov tmp.c90.00% of 10 source lines executed in file tmp.cCreating tmp.c.gcov.The file tmp.c.gcov contains output from gcov. Here is a sample:-: 0:Source:tmp.c-: 0:Graph:tmp.gcno-: 0:Data:tmp.gcda-: 0:Runs:1-: 0:Programs:1-: 1:#include <stdio.h>-: 2:-: 3:int main (void)1: 4:{1: 5: int i, total;-: 6:1: 7: total = 0;-: 8:11: 9: for (i = 0; i < 10; i++)10: 10: total += i;-: 11:1: 12: if (total != 45)#####: 13: printf ("Failure\n");-: 14: else1: 15: printf ("Success\n");1: 16: return 0;-: 17:}
2. gprof
基本用法:
1)使用-pg选项编译和链接
2)执行你的应用程序,使之运行完成后生成供gprof分析的数据文件,默认是gmon.out
3)使用gprof程序分析你的应用程序生成的数据,gprof a.out gmon.out
3. oprofile
http://blog.csdn.net/luckywang1103/article/details/44087325
内存泄露
1. valgrind
举例,下面是一段有问题的c程序代码test.c
#include <stdlib.h>void f(void){ int* x = malloc(10 * sizeof(int)); x[10] = 0; //问题1: 数组下标越界} //问题2: 内存没有释放int main(void){ f(); return 0;}1)编译程序test.c: gcc -Wall test.c -g -o test
2)使用valgrind检查程序bug:valgrind --tool=memcheck --leak-check=full ./test
3)分析调试信息
==3908== Memcheck, a memory error detector.==3908== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.==3908== Using LibVEX rev 1732, a library for dynamic binary translation.==3908== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.==3908== Using valgrind-3.2.3, a dynamic binary instrumentation framework.==3908== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.==3908== For more details, rerun with: -v==3908==--3908-- DWARF2 CFI reader: unhandled CFI instruction 0:50--3908-- DWARF2 CFI reader: unhandled CFI instruction 0:50/*数组越界错误*/==3908== Invalid write of size 4==3908== at 0x8048384: f (test.c:6)==3908== by 0x80483AC: main (test.c:11)==3908== Address 0x400C050 is 0 bytes after a block of size 40 alloc'd==3908== at 0x40046F2: malloc (vg_replace_malloc.c:149)==3908== by 0x8048377: f (test.c:5)==3908== by 0x80483AC: main (test.c:11)==3908====3908== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 1)==3908== malloc/free: in use at exit: 40 bytes in 1 blocks.==3908== malloc/free: 1 allocs, 0 frees, 40 bytes allocated.==3908== For counts of detected errors, rerun with: -v==3908== searching for pointers to 1 not-freed blocks.==3908== checked 59,124 bytes.==3908====3908==/*有内存空间没有释放*/==3908== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1==3908== at 0x40046F2: malloc (vg_replace_malloc.c:149)==3908== by 0x8048377: f (test.c:5)==3908== by 0x80483AC: main (test.c:11)==3908====3908== LEAK SUMMARY:==3908== definitely lost: 40 bytes in 1 blocks.==3908== possibly lost: 0 bytes in 0 blocks.==3908== still reachable: 0 bytes in 0 blocks.==3908== suppressed: 0 bytes in 0 blocks.
以上有部分参考:http://www.udpwork.com/item/13025.html
- linux代码相关的工具
- Linux平台代码覆盖率测试工具GCOV相关文件分析
- Linux平台代码覆盖率测试工具GCOV相关文件分析
- 感兴趣的linux管理相关工具
- linux 测试网速的相关工具
- linux内核模块的相关命令工具
- Linux软件开发相关的编译工具
- Linux开发工具相关的资料
- Linux交叉编译工具的制作相关
- linux 相关工具整理
- linux相关工具
- linux 相关工具介绍
- Linux开发相关工具
- Linux 平台相关代码的 C++ 解决方案
- Linux 平台相关代码的 C++ 解决方案
- Linux 平台相关代码的 C++ 解决方案
- Linux 平台相关代码的 C++ 解决方案
- Linux 平台相关代码的 C++ 解决方案
- 特殊的数字
- P52第31题
- ZOJ 3781 Paint the Grid Reloaded ( BFS(重点是对问题的分析) )
- hdu5204-Rikka with sequence
- poj 2191 Mersenne Composite Numbers 大数分解
- linux代码相关的工具
- 类中有指针成员变量时的一些注意事项
- MST(Minimum Spanning Tree,最小生成树)
- LeetCode Find Minimum in Rotated Sorted Array
- 好难啊
- Tableau 中的组(group)与集(set)
- 杨辉三角形
- yii1.1.x学习笔记(2)session与cookie
- 练习题27页3 4 5 6 代码重补,依照顺序