当前位置: 首页 > news >正文

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 即为文件描述符)

三、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

相关文章:

  • 一个网站开发背景是什么/烟台网络推广
  • 门户网站字体/网络营销的现状
  • wordpress过滤敏感/市场调研方法有哪些
  • 建材网站的模板/安卓优化大师手机版下载
  • 江阴建设局官方网站/南京谷歌推广
  • 手机制作网站开发/新闻摘抄
  • 【漏洞复现-splunk-信息泄露】vulfocus/splunk-cve_2018_11409
  • 15 个实用的 Linux find 命令示例
  • 一周一总结
  • Hadoop 3.x(MapReduce)----【MapReduce 框架原理 五】
  • 实验三.局域网的组建
  • 【C++】打怪升级——通关类和对象(下)
  • 基于小波的图像边缘检测,小波变换边缘检测原理
  • Git 学习笔记
  • QFramework v1.0 使用指南 工具篇:01. QFramework.Toolkits 简介
  • JS(第六课)流程控制语句
  • REACT:react-router-dom详解
  • 【AI】Best-first search (or Greedy Search) 最佳优先搜索(或贪婪搜索)