Linux运维常用的命令介绍-开发调试命令详解
发布时间:2022-07-14 16:41:45 所属栏目:Linux 来源:互联网
导读:今天小编要跟大家分享的文章是关于Linux运维常用的命令介绍-开发调试命令介绍。Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。 Linux入
今天小编要跟大家分享的文章是关于Linux运维常用的命令介绍-开发调试命令介绍。Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。 Linux入门新手和正在Linux学习的小伙伴快来看一看吧,希望能够对大家有所帮助 ! 一、示例程序 我们用一个小程序,来帮助后面我们对这些命令的描述,程序清单cmdTest.c如下: #include<stdio.h> int test(int a,int b) test(a,b); return 0; } 编译获得elf文件cmdTest并运行: gcc -g -o cmdTest cmdTest.c ./cmdTest a=10,b=0 Floating point exception (core dumped) 程序内容是在main函数中调用test,计算a/b的值,其中b的值为0,因此程序由于除0错误异常终止。 二、查看文件基本信息--file file cmdTest cmdTest: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=448e1c34b4c548120e2c04f6a2bfce4e6d2281a3, not stripped 三、查看程序依赖库--ldd ldd cmdTest Linux-vdso.so.1 => (0x00007ffc8e548000) libc.so.6 => /lib/x86_64-Linux-gnu/libc.so.6 (0x00007f0621931000) /lib64/ld-Linux-x86-64.so.2 (0x00007f0621cf6000) 我们可以看到cmdTest依赖了libc.so等库。 四、查看函数或者全局变量是否存在于elf文件中--nm nm命令用于查看elf文件的符号信息。文件编译出来之后,我们可能不知道新增加的函数或者全局变量是否已经成功编译进去。这时候,我们可以使用nm命令来查看。 例如,查看前面所提到的elf文件有没有test函数,可以用命令: nm cmdTest|grep test 000000000040052d T test #打印结果 按照地址顺序列出符号信息: w __gmon_start__ U __libc_start_main@@GLIBC_2.2.5 U printf@@GLIBC_2.2.5 00000000004003e0 T _init 0000000000400590 T __libc_csu_init 0000000000400600 T __libc_csu_fini (列出部分内容) 可以看到test函数的开始地址为0x000000000040052d,结束地址为0x0000000000400540。 五、打印elf文件中的可打印字符串--strings 例如你在代码中存储了一个版本号信息,那么即使编译成elf文件后,仍然可以通过strings搜索其中的字符串甚至可以搜索某个.c文件是否编译在其中: strings elfFile| grep "someString" 六、查看文件段大小--size 可以通过size命令查看各段大小: size cmdTest text data bss dec hex filename 1319 560 8 1887 75f cmdTest text段:正文段字节数大小 data段:包含静态变量和已经初始化的全局变量的数据段字节数大小 bss段:存放程序中未初始化的全局变量的字节数大小 当我们知道各个段的大小之后,如果有减小程序大小的需求,就可以有针对性的对elf文件进行优化处理。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |