当前位置: 首页 > news >正文

网站设计电脑培训学校精品建站

网站设计电脑培训学校,精品建站,危机舆情公关公司,如何制作一个软件app前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用#xff0c;有些可以帮助了解或优化我们的程序#xff0c;有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。 转自#xff1a;https://www.yanbinghu.com/2018/09/26/61877.html 示例程序…前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用有些可以帮助了解或优化我们的程序有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。 转自https://www.yanbinghu.com/2018/09/26/61877.html 示例程序 我们用一个小程序来帮助后面我们对这些命令的描述程序清单cmdTest.c如下: #includestdio.h int test(int a,int b) {return a/b; } int main(int argc,char *argv[]) {int a 10;int b 0;printf(a%d,b%d\n,a,b);test(a,b);return 0; }编译获得elf文件cmdTest并运行 gcc -g -o cmdTest cmdTest.c ./cmdTest输出 a10,b0 Floating point exception (core dumped)程序内容是在main函数中调用test计算a/b的值其中b的值为0因此程序由于除0错误异常终止。 常用开发调试命令 1 查看文件基本信息—file file cmdTest输出 cmdTest: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]a1bd4a7dd456246a029c0f5dfc763042b8d2c68e, with debug_info, not stripped通过file命令可以看到cmdTest的类型为elf是64位、运行于x86-64的程序not striped表明elf文件中还保留着符号信息以及调试信息等不影响程序运行的内容。 2 查看程序依赖库—ldd ldd cmdTest输出 linux-vdso.so.1 (0x00007fffa5be0000)libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3185bf0000)/lib64/ld-linux-x86-64.so.2 (0x00007f31861e3000)我们可以看到cmdTest依赖了libc.so等库。 3 查看函数或者全局变量是否存在于elf文件中—nm nm命令用于查看elf文件的符号信息。文件编译出来之后我们可能不知道新增加的函数或者全局变量是否已经成功编译进去。这时候我们可以使用nm命令来查看。 例如查看前面所提到的elf文件有没有test函数可以用命令 nm cmdTest | grep test输出 000000000040052d T test 按照地址顺序列出符号信息 nm -n cmdTest输出 w __cxa_finalizeGLIBC_2.2.5w __gmon_start__w _ITM_deregisterTMCloneTablew _ITM_registerTMCloneTableU __libc_start_mainGLIBC_2.2.5U printfGLIBC_2.2.5 00000000000004f0 T _init 0000000000000540 T _start 0000000000000570 t deregister_tm_clones 00000000000005b0 t register_tm_clones 0000000000000600 t __do_global_dtors_aux 0000000000000640 t frame_dummy 000000000000064a T test 000000000000065d T main 00000000000006b0 T __libc_csu_init 0000000000000720 T __libc_csu_fini 0000000000000724 T _fini 0000000000000730 R _IO_stdin_used 0000000000000740 r __GNU_EH_FRAME_HDR 00000000000008ac r __FRAME_END__ 0000000000200db8 t __frame_dummy_init_array_entry 0000000000200db8 t __init_array_start 0000000000200dc0 t __do_global_dtors_aux_fini_array_entry 0000000000200dc0 t __init_array_end 0000000000200dc8 d _DYNAMIC 0000000000200fb8 d _GLOBAL_OFFSET_TABLE_ 0000000000201000 D __data_start 0000000000201000 W data_start 0000000000201008 D __dso_handle 0000000000201010 B __bss_start 0000000000201010 b completed.7698 0000000000201010 D _edata 0000000000201010 D __TMC_END__ 0000000000201018 B _end可以看到test函数的开始地址为000000000000064a结束地址为000000000000065d。 4 打印elf文件中的可打印字符串—strings 例如你在代码中存储了一个版本号信息那么即使编译成elf文件后仍然可以通过strings搜索其中的字符串甚至可以搜索某个.c文件是否编译在其中 strings elfFile| grep someString5 查看文件段大小—size 可以通过size命令查看各段大小 size cmdTest输出 text data bss dec hex filename1619 600 8 2227 8b3 cmdTesttext段正文段字节数大小 data段:包含静态变量和已经初始化的全局变量的数据段字节数大小 bss段存放程序中未初始化的全局变量的字节数大小 当我们知道各个段的大小之后如果有减小程序大小的需求就可以有针对性的对elf文件进行优化处理。 6 为elf文件”瘦身“—strip strip用于去掉elf文件中所有的符号信息 ls -al cmdTest -rwxr-xr-x 1 hyb root 9792 Sep 25 20:30 cmdTest #总大小为9792字节strip cmdTestls -al cmdTest -rwxr-xr-x 1 hyb root 6248 Sep 25 20:35 cmdTest#strip之后大小为6248字节可以看到“瘦身”之后大小减少将近三分之一。但是要特别注意的是“瘦身”之后的elf文件由于没有了符号信息许多调试命令将无法正常使用出现core dump时问题也较难定位因此只建议在正式发布时对其进行“瘦身”。 7 查看elf文件信息—readelf readelf用于查看elf文件信息它可以查看各段信息符号信息等下面的例子是查看elf文件头信息 readelf -h cmdTest输出 ELF Header:Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64Data: 2s complement, little endianVersion: 1 (current)OS/ABI: UNIX - System VABI Version: 0Type: DYN (Shared object file)Machine: Advanced Micro Devices X86-64Version: 0x1Entry point address: 0x540Start of program headers: 64 (bytes into file)Start of section headers: 8808 (bytes into file)Flags: 0x0Size of this header: 64 (bytes)Size of program headers: 56 (bytes)Number of program headers: 9Size of section headers: 64 (bytes)Number of section headers: 34Section header string table index: 33从elf头信息中我们可以知道该elf是64位可执行文件运行在x86-64中且字节序为小端序。另外我们还注意到它的入口地址是0x400440(_start)而不是400540(main)。也就是说我们的程序运行并非从main开始。 8 反汇编指定函数—objdump objdump用于展示elf文件信息功能较多在此不逐一介绍。有时候我们需要反汇编来定位一些问题可以使用命令 objdump -d cmdTest #反汇编整个cmdTest程序但是如果程序较大那么反汇编时间将会变长而且反汇编文件也会很大。如果我们已经知道了问题在某个函数只想反汇编某一个函数怎么处理呢 我们可以利用前面介绍的nm命令获取到函数test的地址然后使用下面的方式反汇编 objdump -d cmdTest --start-address0x40052d --stop-address0x400540 # 反汇编指定地址区间9 端口占用情况查看—netstat 我们可能常常会遇到进程第一次启动后再次启动会出现端口绑定失败的问题我们可以通过netstat命令查看端口占用情况 netstat -anp|grep 端口号10 进程状态查看—pstop ps命令用于显示当前进程的状态类似于 windows 的任务管理器。 top命令实时显示当前进程状态最活跃的进程显示在最顶部。 11 core dump文件生成配置—ulimit -c 有时候我们的程序core dump了却没有生成core文件很可能是我们设置的问题 ulimit -c #查看core文件配置如果结果为0程序core dump时将不会生成core文件 ulimit -c unlimited #不限制core文件生成大小 ulimit -c 10 #设置最大生成大小为10kb12 调试神器—gdb gdb是一个强大的调试工具但这里仅介绍两个简单使用示例。 有时候程序可能已经正在运行但是又不能终止它这时候仍然可以使用gdb调试正在运行的进程 gdb processFile PID #processFile为进程文件pid为进程id可通过ps命令查找到有时候程序可能core dump了但是系统还留给了我们一个礼物—core文件。 在core文件生成配置完成之后运行cmdTest程序产生core文件。我们可以用下面的方法通过core文件定位出错位置 gdb cmdTest core #processFile为进程文件core为生成的core文件 Core was generated by ./cmdTest. Program terminated with signal SIGFPE, Arithmetic exception. #0 0x00000000004004fb in test (a10, b0) at cmdTest.c:4 4 return a/b; (gdb)bt #0 0x00000000004004fb in test (a10, b0) at cmdTest.c:4 #1 0x000000000040052c in main (argc1, argv0x7ffca9536d38) at cmdTest.c:10 (gdb)输入bt后就可以看到调用栈了,出错位置在test函数cmdTest.c的第4行。 13 定位crash问题—addr2line 有时候程序崩溃了但不幸没有生成core文件是不是就完全没有办法了呢还是cmdTest的例子。运行完cmdTest之后我们通过dmesg命令可以获取到以下内容 [27153070.538380] traps: cmdTest[2836] trap divide error ip:40053b sp:7ffc230d9280 error:0 in cmdTest[4000001000]该信息记录了cmdTest运行出错的基本原因divide error和出错位置40053b,我们使用addr2line命令获取出错具体行号 addr2line -e cmdTest 40053b /home/hyb/practice/cmdTest.c:4可以看到addr2line命令将地址(40053b)翻译成了文件名(cmdTest.c)和行号(4)确定了出错位置。 总结 本文对以上命令仅介绍其经典使用这些命令都还有其他一些有帮助的用法但由于篇幅有限不在此介绍更多使用方法可以通过man命令名的方式去了解。
http://www.yutouwan.com/news/92505/

相关文章:

  • 小型教育网站开发做网站都用什么软件
  • 自己做的博客网站表白网站制作代码
  • 怎样查看网站是用什么cms_做的女生学计算机哪个专业简单
  • 用drupal做的网站wordpress 注册用户 邮件
  • 企业运营网站建设求职简历模板免费
  • 网站备案号几位数字 沪长沙简界网络科技有限公司
  • 做外贸的网站域名怎么买网站开发技术试验总结
  • godaddy 上传网站Wordpress plan
  • 百度怎么做网站排名成都知名网络营销公司
  • 俄罗斯免费网站推广富阳网站建设报价
  • 深圳福田区是富人区吗seo排名怎么样
  • php mysql购物网站开发中国移动的5G网站建设给了谁
  • html网页制作企业类网站局域网建设网站如何访问
  • 销售网站建设赚钱吗近期国内新闻热点事件
  • 一般网站使用什么做的郴州有什么好玩的地方
  • 搭建网站架构是什么意思百度打广告收费表
  • 北京网站优化流程海尔电商网站建设方案
  • 网站建设论文html格式手机端网站html好看的模板
  • 网站总浏览量企业文化ppt模板免费
  • 常州网站建设外包杭州滨江网站建设
  • 企业网站的信息内容包括什么诸暨市建设局网站
  • 国外做外贸哪个网站好些科技馆
  • 顶尖手机网站建设济宁融合百度推广公司
  • 青羊区企业网站建设策划爱站网长尾关键词挖掘工具下载
  • 网站在哪里备案网站自适应屏幕
  • 做网站开发需要什么手机上怎么设计广告图片
  • 产品宣传网站的重点保定哪做网站好
  • 王者荣耀官方网站广东网站设计招工.
  • 建自己的网站用多少钱成都网站外包优化公司
  • 长沙好的网站建设公司深圳外贸10强公司