Debug#
重要提示!
先在 tldr 上搜索:https://tldr.inbrowser.app/
内核与驱动开发:https://gitee.com/zhyantao/pdf/raw/master/linux/linux-kernel-slides.pdf
调试技术:https://gitee.com/zhyantao/pdf/raw/master/linux/debugging-slides.pdf
音频模块:https://gitee.com/zhyantao/pdf/raw/master/linux/audio-slides.pdf
抢占式实时 OS:https://gitee.com/zhyantao/pdf/raw/master/linux/preempt-rt-slides.pdf
嵌入式 Linux:https://gitee.com/zhyantao/pdf/raw/master/linux/embedded-linux-slides.pdf
图形与图像系统:https://gitee.com/zhyantao/pdf/raw/master/linux/graphics-slides.pdf
工具类别 |
工具名称 |
主要功能描述 |
---|---|---|
网络分析 |
|
显示网络连接、路由表、接口统计等信息 |
|
网络抓包工具,用于分析网络流量 |
|
|
网络带宽测试工具 |
|
文件分析 |
|
列出打开的文件和网络连接 |
|
检测文件类型 |
|
|
提取文件中的可打印字符串 |
|
系统调用跟踪 |
|
跟踪程序执行时的系统调用和信号 |
|
跟踪程序执行时的库函数调用 |
|
性能分析 |
|
Linux 性能分析工具,支持 CPU 性能分析、函数调用图等 |
|
分析程序的性能瓶颈,生成函数调用图和耗时统计 |
|
|
报告虚拟内存、CPU、I/O 等系统状态 |
|
|
监控系统I/O设备的使用情况 |
|
|
交互式进程查看器,实时监控系统资源使用情况 |
|
内存调试 |
|
内存调试工具,检测内存泄漏、非法内存访问等问题 |
|
代码覆盖率测试工具 |
|
二进制分析 |
|
显示目标文件的详细信息,包括反汇编、段信息、符号表等 |
|
显示 ELF 文件的详细信息,如段头、符号表、动态段等 |
|
|
显示目标文件的符号表 |
|
|
将地址转换为文件名和行号 |
|
|
列出可执行文件或共享库依赖的动态库 |
|
内核调试 |
|
查看内核日志,用于分析内核级别的错误 |
|
查看和修改内核参数 |
|
|
OpenWrt 进程管理工具 |
|
动态分析 |
|
动态链接器,支持环境变量调试功能 |
静态分析 |
|
C/C++ 代码静态分析工具 |
|
Clang 的静态分析工具 |
|
|
C 代码的静态分析工具 |
|
进程管理 |
|
查看当前运行的进程信息 |
|
实时监控系统进程和资源使用情况 |
|
|
监控进程的 CPU、内存、I/O 等资源使用情况 |
netstat#
# 显示 gpsd 进程的所有网络资源(TCP/UDP/UNIX)
netstat -ap | grep gpsd
tcpdump#
# 捕获 53494 端口的流量
tcpdump -i any port 53494
# 显示时间戳和数据内容
tcpdump -i any port 53494 -tttt -A
# 保存原始数据包供后续分析
tcpdump -i any port 53494 -w save.pcap
lsof#
# 查看 gpsd 所有打开的文件
lsof | grep gpsd
strace#
# 附加到正在运行的 gpsd 进程上,跟踪所有网络相关的系统调用
strace -p 7497 -e trace=network -s 100
gdb#
类别 |
命令 |
描述 |
示例 |
---|---|---|---|
断点与执行控制 |
|
设置函数断点 |
|
|
在指定文件的指定行设置断点 |
|
|
|
查看所有断点 |
|
|
|
删除断点 |
|
|
|
启动程序 |
|
|
|
继续执行 |
|
|
|
单步进入函数 |
|
|
|
单步跳过函数 |
|
|
调用栈与上下文 |
|
打印调用栈 |
|
|
切换栈帧 |
|
|
|
查看当前帧局部变量 |
|
|
变量与内存查看 |
|
打印表达式值 |
|
|
检查内存 |
|
|
|
设置数据观察点 |
|
|
寄存器与汇编 |
|
查看寄存器值 |
|
|
反汇编函数 |
|
grep#
命令 |
等价形式 |
示例说明 |
---|---|---|
|
- |
|
|
||
|
||
|
|
|
|
||
|
|
|
|
sed#
# 将 filename.txt 中的 abc def 替换为 def abc
sed -i 's@abc def@def abc@' filename.txt
注:@
可以是其他符号,它的主要作用在于区分需要替换的字符串和原始字符串。
tee#
tee
命令主要用于将一段文字写入文件。
cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
如果向文件中添加的内容包含特殊字符,比如 $()
,我们发现 $()
消失不见了,解决方式如下:
cat <<\EOF | tee test.txt
CURR_DIR := $(shell pwd)
EOF
tar#
tar
命令主要用于打包文件和目录,并不直接进行压缩。
如果你希望在打包的同时也减小文件的大小,你需要在使用 tar
命令时结合一个压缩工具,如 gzip
、bzip2
、xz
等。例如:
使用
gzip
压缩:tar czf archive_name.tar.gz file_or_directory_to_compress
使用
bzip2
压缩:tar cjf archive_name.tar.bz2 file_or_directory_to_compress
使用
xz
压缩:tar cJf archive_name.tar.xz file_or_directory_to_compress
解压时,仍然需要跟上 z
、j
或者 J
选项,才能正常解压。
快捷键#
快捷键/命令 |
功能描述 |
---|---|
|
冻结窗口,用 |
|
清屏 |
|
终止程序运行 |
|
输出到屏幕 |
|
显示环境变量 |
|
显示上次命令是否运行成功(0 表示成功,非 0 表示失败) |
|
查看内存和交换分区的使用情况 |
|
以指定单位(M、G、K)显示内存和交换分区使用情况 |
|
关机 |
|
重启 |
|
关机后关闭电源 |