linux调试程序常用的几个工具和命令

记录一下调试程序过程中用到工具或命令:top、strace、lsof、gdb等。

一、top
1、输出参数介绍
PID:进程的ID
USER:进程所有者
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

查看进程所占的CPU和线程堆栈:
第一步:top 查看程序进程id
第二步:top -Hp 96263(进程ID) 定位CPU占用过高的线程id
第三步:使用sudo pstack 96263(线程ID或者进程ID)或者sudo strace -f -p 96263 定位线程堆栈(sudo strace -f -p 96263)

2、查看进程所占的内存:
cat /proc/18714/status
VmRSS: 15908 kB表示占用的物理内存

查看堆栈
cat /proc/[pid]/stack

二、strace
1、查看系统api调用情况:
strace -p pid

2、统计程序的调用时间
strace -c -p pid

3、查看进程的调用的系统I/O:
strace -f -p pid
可以看到例如这样的系统调用:
[pid 6873] read(9, “”, 5807) = 0
(其中 9 即为文件描述符)

4、启动程序并输出程序系统调用的log:
strace -f -F -o log.txt ./hello
这里 -f -F选项告诉strace同时跟踪fork和vfork出来的进程,-o选项把所有strace输出写到log.txt里 面

三、netstat
1、查看进程使用的所有端口,例如进程名字是hello:
netstat -natp | grep hello

2、查看某个端口使用的情况,例如50000端口:
netstat -natp | grep 50000

3、查看路由表:
netstat -r

四、lsof
1、使用 lsof 查看程序打开的所有文件描述符有哪些,例如进程 6854 所打开的所有文件描述符:
lsof -np 6854
可以看到类似下面的
otamaster 7769 root 9u IPv4 1788250 0t0 TCP 172.25.237.64:47918->111.59.73.99:https (CLOSE_WAIT)
其中9u就是文件描述符

2、确认删除文件是否被占用
lsof | grep deleted

五、gdb
1、使用 gdb 连接到进程
gdb -p PID

2、不杀掉进程,并关闭可能造成该进程卡死的文件描述符或者socket 连接(在gdb -p PID后执行下面命令)
(gdb) call close(9u)

(文件描述符9u的查看请参考lsof的说明)
这样,文件描述符或者 Socket 连接就可以关闭了,并且进程还是好着的。

六、pstree
1、查看18977进程的子进程
pstree 18977

2、查看18977进程的父进程
cat /proc/18977/status | grep PPid

七、tcpdump
1、抓取网卡的网络数据包,例如抓取ens33这个网卡的网络数据包:
tcpdump -i ens33 -w filename.pcap

2、抓取所有网卡的网络数据包:
tcpdump -i any -w filename.pcap

八、free
1、查看内存使用情况 [-b/k/m/g]:
以MB为单位显示内存使用情况
free -m

2、持续观察内存使用状况 (以2秒为间隔来进行检测观察)
free -s 2

3、显示内存总和列
free -t -h

九、dmesg
1、程序被Killed,查看原因
dmesg | egrep -i -B100 ‘killed process’

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值