linux开发调试基础笔记
主要参考:linux常用命令--开发调试篇 | 守望的个人博客 (yanbinghu.com)
1. elf文件格式
linux的主要可执行文件格式,Unix system lab开发和发布的应用程序二进制接口。
2. 查看文件基本信息
file + 文件名
3. 查看elf文件的程序依赖库(动态库)
ldd + 可执行文件名
4. 查看elf文件符号信息
nm + 可执行文件名
对于函数、全局变量等是否存在(新的符号是否已成功编译),可以nm然后grep
-n 参数可以按照地址顺序列出符号信息
5. 搜索elf文件中的可打印字符串
strings + elf文件名
strings搜索文件中的可打印字符串并输出。由于elf文件中以字符形式记录了编译的源文件,使用strings可以检查某个.c文件是否编译在其中。
6. 查看elf文件各段的大小
size + elf文件名
text是正文段,data段包含静态变量和已初始化的全局变量,bss段包含未初始化的全局变量
7. 去除elf文件中所有符号信息
strip + elf文件名
8. 查看elf文件信息
readelf + elf文件名
查看的包括各段信息、符号信息等
-h是查看elf文件的文件头信息
64位时,main地址为0x400540。入口地址不是main,而是_start。main是用户代码的入口,由系统库调用。_start可以由用户实现。
9. 程序或函数的反汇编
objdump用于展示elf文件信息,功能较多。
其中,objdump -d elf文件名 可以将整个程序反汇编
只反汇编某个问题函数:先用nm命令找到函数地址,然后objdump -d elf文件名 --start-address=函数起始地址 --stop-address=函数结束地址(地址是左闭右开的,并且用0x进行描述。即复制nm的输出即可。)
10. 查看端口占用情况
netstat -anp|grep 端口号
11. 进程状态查看
ps:
top: 实时显示当前进程状态,最活跃的显示在最顶部
12. core dump文件生成配置
ulimit -c 查看core文件配置。如果结果为0,则core文件大小限制为0,即不生成core文件
ulimit -c unlimited 不限制core文件生成大小
ulimit -c 10 core文件最大为10kb
13. gdb简单介绍
gdb 进程对应可执行文件 PID :调试正在运行的进程
gdb 可执行文件 core :core指生成的core文件;输入bt后,可以看到调用栈
gdb --core=path 可执行文件(与上一条同效果)
14. 定位crash问题
程序崩溃了但没有生成core文件 ,可以使用dmesg命令和addr2line命令来定位出错位置
dmesg输出解析:
[系统开启的秒数] 程序名[pid]: 错误原因 ip 指令地址 sp 栈顶地址 错误号 main[基址+大小]
著名错误原因
trap divide error 是发生了除0错误
segfault at 0 是发生了空指针导致的段错误
其中,ip是出错位置
addr2line命令:
addr2line -e 可执行文件 出错位置
addr2line命令会根据位置确定并输出文件名和行数,从而帮助我们确定源码中错误代码的位置。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)