1.ltrace/strace:ltrace用于跟踪库调用的情况,strace用于系统调用的情况,strace是ltrace的一个功能子集,
使用方式:
strace/ltrace [options] -p {PID} //attach到某个进程上
strace/ltrace [options] {command} //运行某个程序并用ltrace跟踪
常用的选项[options]有
-c 调用函数汇总统计
-r 打印出与上一次系统调用的时间间隔
-T 打印出每次系统调用
--l={library} 仅跟踪指定的库(ltrace专用)
-S strace模式(ltrace专用)
关于ltrace/strace/gdb的工作原理,可以参见:http://javadino.blog.sohu.com/101228695.html
2.gdb:C 和C++ 程序的强力调试器,非常强大
使用方式:
gdb {program} 调试program
gdb {program} -c {coredumpfile} 调试program,coredumpfile是coredump文件
gdb -p {pid} 调试进程pid
对于查找问题而言(后两种),进入后输入where可以查看当前程序运行到哪里(最常用的选项)
gdb的具体使用可以参见:http://www.linuxeden.com/html/develop/20070514/26819.html
3.lsof:lsof=list opened files,用于列出被打开的文件,需要注意的是,linux中基本上很多都是文件,如socket、IO设备等
使用方式:
lsof {filename} 显示开启文件filename的进程
lsof -p {pid} 显示进程打开了哪些文件
lsof -c {program} 显示program当前打开了哪些文件
lsof +d {dir} 显示dir目录下被进程开启的文件
lsof +D {dir} 与+d相同,但会搜索子目录
lsof -U 显示Unix Socket
lsof -i [4/6] [protocol][@hostname|hostaddr][:service|port] 显示符合条件的进程
[4/6] 是IPv4还是IPv6
[protocol] tcp或udp
[@hostname|hostaddr] 主机名或IP地址
[:service|port] 服务(/etc/service中定义)或端口
譬如 lsof -i :22 显示当前使用22端口的进程
4.objdump:用来查看elf(execute and linking format)格式文件中的内容
使用方式:
objdump [options] {filename}
选项:
-f 显示elf各section(段)的描述信息
-d 反汇编可执行section(譬如text正文段信息)
-D 反汇编所有的段(信息太多,不如-d有用)
-r 显示需要重定位的符号(一般对.o文件有效)
-R 显示需要重定位动态库符号(一般对加了动态连接库连接的可执行程序有效)
-t 显示符号表
-T 显示所有动态库的符号表(.so动态库)
5.tcpdump:跟踪网络中传输的包,需要注意的是,tcpdump工作在网络混编模式下,即其不仅能跟踪目的地址为本机IP或广播/组薄地址的数据包(网卡默认工作模式),而且可以跟踪发送给其他主机的数据包(混编模式,不过滤本机不能处理的包)(与以太网的总线结有关,局域网内的数据包会发送给所有的主机,以太网卡默认会过滤掉所有本机无法处理的包)。
使用:参见http://www.linux521.com/2009/newbie/200907/7196.html
6.netstat:netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据
使用方式:
tcpdump [options]
选项:
-r 显示关于路由表的信息
-a 显示所有的链接信息
7.top/vmstat/iostat:用于显示系统资源的占用情况
iostat:报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息。
参考:http://www.cublog.cn/u/27493/showart_498055.htm、http://study.chyangwa.com/IT/AIX/aixcmds3/iostat.htm
vmstat:报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
参考:http://www.eygle.com/digest/2007/07/vmstat_man_page.html
Linux C/C++常用工具汇总
最新推荐文章于 2019-06-04 11:44:56 发布