Linux开发调试工具
在Linux日常使用中,最常用的命令自然是sudo, ls, cp, mv, cat等,但作为后台开发者,上述命令远远不够。
开发及调试工具介绍了从“编辑 -> 编译 -> 分析目标文件 -> 追踪调用过程”的全套命令。
开发及调试
- 编辑器:vim
- 编译器:gcc/g++
- 调试工具:gdb
- 查看依赖库:ldd
- 二进制文件分析:objdump
- ELF文件格式分析:readelf
- 跟踪进程中系统调用:strace
- 跟踪进程栈:pstack
- 进程内存映射:pmap
内容
开发及调试
开发工具大部分都提供了完善的功能,所以这里不一一列举用法。从技术层面来说,调试工具比开发工具更考验一个人的工程能力。
-
编辑器:vim
- 功能强大的编辑器。
- 详见
-
编译器:gcc/g++
- C/C++编译器,必知必会,除此以外需要了解预处理-> 编译 -> 汇编 -> 链接等一系列流程。 详见
gcc -E main.c -> main.i #预处理,生成预处理文件 gcc -S main.i -> main.s #编译,生成汇编文件 gcc -c main.s -> main.o #汇编,生成目标文件 gcc -o main.o -> a.out #链接,生成可执行文件
-
调试工具:gdb
- 服务端调试必备。
- 详见
-
查看依赖库:ldd
- 程序依赖库查询
# ldd后接可执行文件 # 第一列为程序依赖什么库,第二列为系统提供的与程序需要的库所对应的库,第三列为库加载的开始地址 # 前两列可以判断系统提供的库和需要的库是否匹配,第三列可以知道当前库在进程地址空间中对应的开始位置 ldd a.out
-
二进制文件分析:objdump
- 反汇编,需要理解汇编语言
- 详见
-
ELF文件格式分析:readelf
- 可以得到ELF文件各段内容,分析链接、符号表等需要用到
- 详见
-
跟踪进程中系统调用:strace
-
跟踪进程栈:pstack
-
进程内存映射:pmap
- 显示进程内存映射
# -x显示扩展信息,后接进程pid # Address: 内存开始地址 # 显示信息: Kbytes: 占用内存的字节数 RSS: 保留内存的字节数 Dirty: 脏页的字节数(包括共享和私有的) Mode: 内存的权限:read、write、execute、shared、private Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈) Device: 设备名 (major:minor) pmap -x 12345