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命令会根据位置确定并输出文件名和行数,从而帮助我们确定源码中错误代码的位置。
                    
                
                
            
        
浙公网安备 33010602011771号