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

posted @   who's_there?  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示