




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux程序调试和性能分析即通平台Tommyli课程知识范围l主要内容从编译到进程等基础知识 常用调试与性能分析工具基础知识l程序 vs 进程程序是指令和数据的集合文件进程是由操作系统将程序加载到内存并运行的实例l目标文件是程序的二进制表示,可以直接在某种处理器上执行基础知识l源代码 - 目标文件gcc E .c -.i 预编译gcc S .i -.s 编译as -o .s - .o 汇编ld .o .o* - exe 链接gcc v 显示详细编译链接过程基础知识l目标文件包含什么信息?ELF文件l可执行链接格式(Executable Linkable Format)Linux最普遍的目标文
2、件格式作为一种可移植的目标文件格式,可以在Intel体系结构上的很多操作系统中使用,从而减少重新编码和重新编译程序的需要ELF文件lELF文件类型可重定位文件(Relocatable File)包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。可执行文件(Executable File)包含适合于执行的一个程序,此文件规定了 exec() 如何创建一个程序的进程映像。共享目标文件(Shared Object File)包含可在两种上下文中链接的代码和数据。首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理,生成另外一个目标文件。其次,动态链接器(Dynami
3、c Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。ELF文件ELF文件l目标文件包含什么信息?代码(.text)数据l.data 初始化了的全局静态变量和局部静态变量l.bss 未初始化的全局变量和局部静态变量l.rodata 只读数据(字符串常量)符号表(symble table)l包括:函数名、全局变量名、函数静态变量名l不包括:数据类型名、局部自动变量名其它 (重定位、加载、动态链接、调试等信息)工具 readelfl功能查看ELF文件内容l用途readelf -h 查看ELF文件头readelf -a 查看ELF所有信息readelf -s 查看ELF文
4、件中的符号表readelf -x .data .rodata .bss .text 查看指定节区工具 objdumpl功能显示来自目标 文件 的信息l用途objdump d 反汇编目标文件objdump s 查看ELF文件节区内容工具nml功能获取二进制文件里面包含的符号l二进制文件:可执行文件、目标文件、库文件l符号:函数、变量l用途 (示例)跟踪链接错误(尤其是C+、C混编的程序)l重要参数-C,把C+函数签名转为可读形式 (认识c+ name mangling)l特别注意不同版本的g+,对于同样C+函数的函数签名可能是不同的,所以C+库难以跨gcc版本编译使用如果发现类似问题,先用nm
5、C看看有无该函数,如果有,再用nm看看函数签名是否一样工具 stripl功能去除二进制文件里面包含的符号l用途反编译、反跟踪(基本手段,作用不大)减小目标文件大小去除调试信息不要随意的对库文件strip,否则l举例strip_demo工具 stringsl功能获取二进制文件里面的字符串常量l用途很多,比较重要的是检查KEY泄露l举例strings f * | grep .16$strings_demol静态链接由链接器将一个或多个库或目标文件链接并拷贝到一块生成可执行目标文件。链接l静态链接符号解析:将符号的定义和引用联系起来重定位:修改引用符号的地址,使其指向符号定义的位置优点:可直接在对应
6、的操作系统运行运行速度快缺点:更新及维护困难空间浪费链接链接l动态链接在可执行文件加载或运行时,由操作系统的动态链接器加载进程所需共享库,完成符号搜索和重定位链接l动态链接PIC:地址无关代码GOT&PLT延迟绑定课后思考l进程加载运行时入口函数是main吗?提示:ELF文件头包含可执行目标文件的入口地址进程空间l可执行目标文件被加载运行后,进程空间是什么样的?拥有独立的虚拟地址空间与可执行目标文件存在映射关系进程空间l通过maps查看进程内存逻缉空间布局进程逻缉地址空间 (虚拟地址空间) (示例)l区间:库在进程里地址范围l权限:r=读,w=写,x=执行,s=共享,p=私有;l偏移量:库在进
7、程里地址范围l设备:映像文件的主设备号和次设备号l节点:映像文件的节点号l路径: 映像文件的路径理解c代码对应的内存分配(示例: maps_demo)进程空间lLinux系统中,进程逻辑地址空间介绍代码段(TEXT)(代码)已初始化数据段(DATA)(已初始化的全局变量、函数静态变量)未初始化数据段(BSS)(未初始化的全局变量、函数静态变量)堆(malloc()、brk()等)共享库共享内存(shmat()等)栈内核保留空间进程空间l思考如下两种写法中,数组s是如何分配的?代码有什么问题?for (i=0; iN; i+)char s1024 = 0; if (x) return s;for
8、 (i=0; i /lib/librt.so.1 (0 x4001a000)libc.so.6 = /lib/libc.so.6 (0 x4002c000)libpthread.so.0 = /lib/libpthread.so.0 (0 x4014f000)/lib/ld-linux.so.2 = /lib/ld-linux.so.2 (0 x40000000)第一栏:需要用什么库;第二栏:实际用哪个库文件;第三栏:库文件装载地址如果缺少动态库,就会没有第二栏。进程维度timel功能显示程序执行时间、其中用户态时间、其中内核态时间l用途性能分析l注意time只跟踪父进程,所以不能forkl举
9、例fork情况下如何分析timel功能Fork情况下,time命令不起作用,使用下面的方法可获取utime & stimel/proc/*/statcat /proc/12345/stat | awk print $14,$15 man 5 proc 查看/proc/number/statlsar x 12345 1 100l程序自己调用times()进程维度stracel功能显示程序调用的系统调用l分清系统调用和c库函数l用途Debug、性能分析、学习现有程序l重要参数-c计算各个系统调用累计占用的时间-T tt显示单个系统调用的开始时间、执行时间l举例进程维度ltracel功能显示程序调用
10、的动态库函数l分清系统调用和c库函数l用途Debug、性能分析、学习现有程序l重要参数-c计算各个函数累计占用的时间-T tt显示单个函数的开始时间、执行时间l注意:Slackware8上面没有装(Suse有)进程维度pmapl功能显示进程内存使用情况l用途性能分析l举例pmap -d 5167lSIZE:该进程占用的地址空间。lRSS:实际被分配的内存的大小。lshared :表示这些被分配的内存是被系统中其他进程共享的。 lprivate :表示只能被该进程使用的空间大小。进程维度gprofl功能显示各个函数的执行时间l用途性能分析l注意gcc -pg -g不能strip必须通过正常途径退
11、出(exit()、main返回),不能kill -9有时不太准只管了用户态时间消耗,没有管内核态消耗可对c库函数进行性能分析,libc_p.a (gcc lc_p)l( 举例 )gprof -b a.out gmon.out进程性能优化的一般步骤l确定运行时间主要花在用户态还是内核态l如果是用户态,则使用gprof进行性能分析l如果是内核态,则使用strace进行性能分析l另外可以使用其他工具(比如ltrace等)辅助系统维度vmstatl功能显示系统整体负载情况l用途性能分析l通常用法vmstat 1 每秒刷新一次结果l举例系统维度iostatl功能对系统的磁盘操作活动进行监视l用途性能分析
12、l通常用法Iostat x l举例系统维度netstatl功能显示udp/tcp socket状态接收、发送队列的大小udp接收丢包l用途高危端口性能分析l重要显示列Recv-Q:Socket接收缓存,满了(比如CPU太忙)就会丢包l举例netstat -lpnwatch netstat -su系统维度topl功能显示系统各个进程整体负载情况l用途性能分析l举例系统维度freel功能显示系统内存使用情况l用途性能分析l举例free -mfree -g系统维度sarl功能性能监控l用途性能分析l通常用法sar d 1 100sar n DEV 1 100sar -u 1 100l举例系统维度lsofl功能它可以列出某个进程打开的所有文件信息。l用途查看进程打开的普通的文件,目录,nfs文件,块文件,字符文件,共享库,管道,符号链接,socket流,网络socket,以及其它更多。l举例不带任何参数运行lsof会列出所有进程打开的所有文件lsof /tmp/access_log 列出哪些进程使用某些文件lsof -c httpd;lsof -p PID 查找某个程序打开的所有文件lsof -i :port 使用某个端口的进程 lsof -d m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度道路交通安全设施设计合同
- 二零二五年度企业资质变更代办服务合同样本
- 2025年度新能源储能技术研发意向投资协议书
- 二零二五年度光伏支架钢板租赁服务协议
- 2025年度美食餐厅连锁加盟及商铺租赁合同
- 二零二五年度水利工程款拨付与水土保持协议
- 二零二五年度境外劳务派遣与海外房地产项目合作协议
- 二零二五年度幼儿园教职工劳动权益保障合同
- 2025年度汽车制造公司股权收购合同样本
- 天津市河西区2024-2025学年高二上学期期末考试政治试题 无答案
- 2025年无锡职业技术学院单招职业技能测试题库带答案
- GB/T 45083-2024再生资源分拣中心建设和管理规范
- 沐足行业严禁黄赌毒承诺书
- 中国食物成分表2018年(标准版)第6版
- 机关事业单位调动人员登记表(样表2022年)
- 城市管理综合执法局城管执法与执法程序PPT模板
- 铅酸蓄电池维护规程
- 部编版七年级语文下学期木兰诗对比阅读练习题(含解析答案)
- 耐碱玻纤网格布检测报告
- 城市更新改造项目合作合同协议书范本
- 环氧玻璃布基覆铜板及粘结片常见外观缺陷及解决方法
评论
0/150
提交评论