linux程序分析命令(三)

news/2024/9/20 4:02:00/ 标签: linux, 运维, 服务器

linux_0">linux程序分析命令(三)

  • **ldd:**用于打印共享库依赖。这个命令会显示出一个可执行文件所依赖的所有共享库(动态链接库),这对于解决运行时库依赖问题非常有用。
  • **nm:**用于列出对象文件的符号表。这个命令可以显示出定义和引用的符号,对于理解程序结构和调试非常有帮助。
  • objdump:显示二进制文件的信息。这个命令可以用来显示程序的汇编代码、段信息等,对于底层分析和调试很有用。
  • strace:跟踪系统调用。通过这个命令,你可以看到一个程序执行时所有的系统调用,这对于理解程序如何与操作系统交互非常重要。
  • ltrace:跟踪库函数调用。与strace类似,但是ltrace专注于跟踪程序调用库函数的情况。
  • gdb:GNU调试器。这是一个功能强大的调试工具,可以让你看到程序执行时的内部情况,比如变量的值、程序的执行流程等。
  • valgrind:内存调试工具。这个工具主要用于检测内存泄漏、内存损坏等问题,对于提高程序稳定性非常有帮助。
  • readelf:显示ELF格式文件的信息。这个命令可以显示出ELF格式的二进制文件(如Linux下的可执行文件和共享库)的详细信息,包括段、节、符号等。
  • file:确定文件类型。这个命令可以帮助你识别一个文件是二进制可执行文件、文本文件还是其他类型的文件。
  • size:显示二进制文件的段大小。这个命令会列出二进制文件各个段(如文本段、数据段)的大小,对于评估程序占用空间有一定帮助。

ltrace

ltrace是一个强大的命令行工具,用于跟踪程序执行时的库调用(例如,从共享库中调用的函数)。这对于调试和理解程序如何与系统的其他部分交互非常有用。

基本用法

跟踪程序的库调用

最基本的用法是直接运行ltrace后跟你想要跟踪的程序名

ltrace ls
#输出到文件
ltrace -o output.txt ls

高级用法

过滤特定的函数调用

使用-e 选项可以指定只跟踪的函数调用。

ltrace -e malloc+free ls

跟踪子进程

使用-f选项可以跟踪程序产生的所有子进程。

ltrace -f some_application

设置断点

ltrace允许你在特定的函数调用时暂停程序执行。

ltrace -b malloc some_application

条件过滤

可以结合使用-e选项和正则表达式来过滤只有在特定条件下才会出现的调用。

ltrace -e '.*file.*' some_application

gdb

gdb基本用法

#启动gdb
#启动没有任何程序的gdb:
gdb
#启动并加载一个程序:
gdb /path/to/program
#设置断点
#在函数开始处设置断点:
(gdb) break function_name
#在指定行号设置断点:
(gdb) break file.c:line_number
#程序执行
#开始或继续执行程序:
(gdb) run
#执行下一行代码(不进入函数):
(gdb) next
#单步执行(进入函数):
(gdb) step
#检查值
#打印变量的值:
(gdb) print variable_name
#查看栈帧:
(gdb) backtrace

gdb高级用法

#条件断点
#在特定条件下触发断点:(gdb) break file.c:line_number if condition
##观察点
#设置观察点,当变量的值改变时暂停执行:(gdb) watch variable_name
#调用函数
#在调试过程中调用程序的函数:(gdb) call function_name(arguments)
#批处理模式
#使用脚本自动化gdb命令:gdb -x script.gdb /path/to/program
##多线程调试
#列出所有线程:(gdb) info threads
#切换到特定线程:(gdb) thread thread_id
##远程调试
#在目标机器上启动gdbserver:gdbserver host:port /path/to/program
#在本地机器上连接到gdbserver:gdb /path/to/program
(gdb) target remote host:port

valgrind

Valgrind 基本用法

安装 Valgrind

在大多数Linux发行版中,可以通过包管理器安装Valgrind。例如,在Ubuntu上,可以使用以下命令安装:

sudo apt-get install valgrind

使用 Memcheck 工具检测内存泄漏

Memcheck 是Valgrind中最常用的工具,用于检测内存泄漏和错误的内存使用。使用Memcheck检测一个程序,只需在命令行中输入:

valgrind --leak-check=yes your_program arguments

Valgrind 高级用法

详细的内存泄漏报告

如果你需要更详细的内存泄漏报告,可以增加–leak-check=full参数。这将会告诉你哪些确切的数据结构和变量导致了内存泄漏:

valgrind --leak-check=full your_program arguments

检查线程错误

Valgrind的Helgrind和DRD工具可以帮助检测多线程程序中的竞争条件和死锁。使用Helgrind检查程序:

valgrind --tool=helgrind your_program arguments

调整内存泄漏报告的详细程度

使用–leak-resolution=med(或high、low)来调整报告的详细程度。高分辨率会给出更详细的信息,但可能会使输出变得难以管理:

valgrind --leak-check=full --leak-resolution=high your_program arguments

生成调用图

使用–callgrind-out-file参数来生成程序执行过程的调用图,这对于性能分析特别有用:

valgrind --tool=callgrind --callgrind-out-file=callgrind.out your_program

使用Massif工具分析堆使用情况

Massif是Valgrind的一个工具,用于分析程序在运行时堆的使用情况,帮助优化程序的内存使用:

valgrind --tool=massif your_program arguments

readelf

readelf基本用法

查看文件头信息

使用-h选项可以显示ELF文件的文件头信息,这包括了ELF版本、入口点地址、程序头表位置等信息。

readelf -h /path/to/your_program

查看节区头信息

使用-S选项可以列出ELF文件中所有节区的头信息,包括节区名称、大小、地址等。

readelf -S /path/to/your_program

查看程序头信息

使用-l选项可以显示程序头信息,这对于理解程序如何在内存中布局非常有帮助。

readelf -l /path/to/your_program

readelf高级用法

查看符号表

使用-s选项可以显示ELF文件中的符号表,这包括了函数和变量名等符号信息,对于调试和逆向工程非常有用。

readelf -s /path/to/your_program

查看重定位信息

使用-r选项可以查看文件的重定位信息,这对于理解动态链接是如何工作的非常有帮助。

readelf -r /path/to/your_program

查看动态段信息

使用-d选项可以查看动态段信息,包括了动态链接器需要的各种参数。

readelf -d /path/to/your_program

查看所有信息

如果你想要一次性查看所有可用的信息,可以使用-a选项,这将输出大量的详细信息。

readelf -a /path/to/your_program

file

file基本用法

确定单个文件的类型

最基本的用法是通过简单地将文件名作为参数来使用file命令:

file /path/to/file

这将输出该文件的类型。

同时检查多个文件

file命令也可以同时检查多个文件,只需将它们作为参数一起传递:

file file1 file2 file3

从文件列表中读取

如果你有一个包含文件名的列表,可以使用-f选项从该文件读取并检查每个文件:

file -f files.txt

其中files.txt是一个包含要检查的文件路径的文本文件。

file高级用法

检查目录

使用-d选项可以检查目录本身而不是目录中的文件:
file -d /path/to/directory
输出MIME类型

使用-i或–mime选项会输出文件的MIME类型(例如,text/plain; charset=us-ascii),这对于脚本处理特别有用:
file --mime /path/to/file
显示文件系统类型

使用-s选项可以显示磁盘或磁盘映像的文件系统类型:

file -s /dev/sda1

递归检查

使用-R或–recursive选项可以递归地检查目录中的所有文件:

file -R /path/to/directory

size

size基本用法

显示文件尺寸

最基本的使用方法是直接将文件名作为参数:

size /path/to/your_program

这将输出程序的文本、数据和bss段的尺寸。

同时显示多个文件尺寸

size命令可以同时处理多个文件,只需将它们作为参数一起传递:

size file1 file2 file3

使用Berkeley格式输出

默认情况下,size命令使用SysV格式输出,但你可以使用-m选项切换到Berkeley格式,这会改变输出的布局和信息:

size -m /path/to/your_program

size高级用法

输出格式

使用-A或–format=SysV选项可以显示详细的段信息,包括段名称和大小:

size -A /path/to/your_program

总结所有文件尺寸

如果你想要得到多个文件尺寸的总和,可以使用–total选项:

size --total file1 file2 file3

输出为十六进制或八进制

使用-o或-x选项可以将尺寸输出为八进制或十六进制格式,这对于某些特定的分析可能更有用:

size -x /path/to/your_program  # 十六进制
size -o /path/to/your_program  # 八进制

http://www.ppmy.cn/news/1460964.html

相关文章

【vector】迭代器

Vector的基本数据结构 可以看到end指向的是数组的最后一个元素&#xff1b; 那么在使用函数遍历的时候就要注意这种清理&#xff1b; 比如计算一个数组前5个数字的最小值&#xff1b; vector<int> prices{2,1,4,2,0,52,12};auto iter_min min_element(prices.begin(),pr…

对云原生整体解决方案的进一步复盘

云原生当前虽然越来越受到传统企业的重视&#xff0c;但是由于很多企业本身信息化建设水平相对滞后&#xff0c;因此当前云原生涉及到的微服务&#xff0c;容器&#xff0c;DevOps等管理和技术实践更多也集中在金融&#xff0c;电信&#xff0c;能源&#xff0c;互联网等企业偏…

04、 .java程序用 editplus 工具打开的过程及在 editplus 工具中配置 java/javac 命令的过程

EditPlus 工具的使用&#xff1a; 1、安装 editplus 工具的过程&#xff1a;其一、安装包地址&#xff1a;其二、安装步骤&#xff1a; 2、使用 editplus 工具打开 .java 程序的过程&#xff1a;其一、修改默认打开 .java 的工具&#xff1a;其二、效果展示&#xff1a; 3、在 …

Java入门基础学习笔记14——数据类型转换

类型转换&#xff1a; 1、存在某种类型的变量赋值给另一种类型的变量&#xff1b; 2、存在不同类型的数据一起运算。 自动类型转换&#xff1a; 类型范围小的变量&#xff0c;可以直接赋值给类型范围大的变量。 byte类型赋值给int类型&#xff0c;就是自动类型转换。 pack…

采用java+B/S开发的全套医院绩效考核系统源码springboot+mybaits 医院绩效考核系统优势

采用java开发的全套医院绩效考核系统源码springbootmybaits 医院绩效考核系统优势 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求&#xff0c;以“工作量为基础的考核方案”为核心思想&#xff0c;结合患者满意度、服务质量、技术难度、工作效率、医德医风等管…

Cocos Creator 3.8.x 透明带滚动功能的容器

ScrollView 是一种带滚动功能的容器 1、删除ScrollView下Sprite组件的SpriteFrame 2、ScrollView下scrollBar的Sprite组件的Color设为&#xff1a;FFFFFF00 3、ScrollView下view的Graphics组件的FillColor设为&#xff1a;FFFFFF00

sass详解

Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;是一种CSS预处理器&#xff0c;它增加了许多额外的功能和功能来改进CSS的编写和维护过程。 以下是Sass的一些主要功能&#xff1a; 1. 变量&#xff1a;Sass允许你声明并使用变量来存储常用的值&#xff0c;这…

结合场景,浅谈深浅度拷贝

有两段代码是这样的&#xff1a; A段&#xff1a; List<String> list1 new ArrayList<>(); Bear B new Bear(); for(Apple apple : apples){B.url apple.url;B.content apple.content;list1.add(Bear); } B段&#xff1a; List<String> list1 new A…

做跨境电商如何解决IP独立环境?

在跨境电商领域&#xff0c;确保独立IP环境对于保护商家信息安全、避免账号关联风险以及提升操作效率至关重要。以下是解决跨境电商IP独立环境的几种方法&#xff1a; 使用虚拟专用网络 虚拟专用网络是一种可以在公共网络上建立加密通道的技术&#xff0c;通过这种技术可以使…

C++Primer Plus第五章结构编程练习10

10.编写一个使用嵌套循环的程序&#xff0c;要求用户输入一个值&#xff0c;指出要显示多少行。然后&#xff0c;程序将显示相应行数的星号&#xff0c;其中第一行包括一个星号&#xff0c;第二行包括两个星号&#xff0c;依此类推。每一行包含的字符数等于用户指定的行数&…

【计算机网络】数据链路层 组帧 习题4

组帧 发送方根据一定的规则将网络层递交的分组封装成帧(也称为组帧)。 组帧时&#xff0c;既要加首部&#xff0c;也要加尾部&#xff0c;原因是&#xff0c;在网络信息中&#xff0c;帧是以最小单位传输的。所以接收方要正确地接收帧&#xff0c;就必须清楚该帧在一串比特串中…

26_Scala集合常用API汇总

文章目录 1.mkString2.size&#xff0c;length&#xff0c;isEmpty,contains3.reverse ,length,distinct4.获取数据相关4.1数据准备4.2准确获取尾部last4.3 除了最后一个元素不要其他都要4.4从集合获取部分数据 5.删除数据5.1删除3个从左边5.2删除3个右边 6.切分数据splitAt(n:…

前端XHR请求数据

axios封装了XHR(XMLHttpRequest) 效果 项目结构 Jakarta EE9&#xff0c;Web项目。 无额外的maven依赖 1、Web页面 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title&…

CPU的的处理流程如何快速记忆

为了快速记忆CPU的处理流程&#xff0c;可以将其简化成五个主要阶段&#xff0c;通常称为“冯诺依曼架构”的五个基本步骤&#xff0c;或者是流水线处理的几个阶段。下面是一种便于记忆的简化版本&#xff1a; CPU处理流程的五个阶段&#xff1a; 取指令&#xff08;Instructi…

1.5.2 基于XML配置方式使用Spring MVC

用户登录演示效果 实战概述&#xff0c;可以帮助你更好地理解整个流程。 项目创建 创建了一个名为 SpringMvcDemo01 的 Jakarta EE 项目。通过 Maven 添加了项目所需的依赖&#xff0c;包括 Spring MVC、JSTL 等。 视图层页面 创建了登录页面&#xff08;login.jsp&#xff0…

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量&#xff08;boolean&#xff09; 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…

【银角大王——Django课程——靓号搜索实现/单独一篇】

搜索框功能实现 靓号搜索在Django框架中搜索功能实现——底层就是模糊查询添加一个搜索框&#xff0c;使用bootstrap框架将GO&#xff01;修改成一个放大镜靓号列表函数代码解释效果演示 靓号搜索 在Django框架中搜索功能实现——底层就是模糊查询 数字条件用法字符串条件用法…

Gsteamer播放MP4文件

1.概述&#xff1a; gstreamer提供了gst-launch工具&#xff0c;使用该工具我们可以很方便的搭建各种管道&#xff0c;比如gst-launc-1.0 videotestsrc ! autovideosink输入上述命令&#xff0c;我们就能测试视频通路是否OK&#xff0c;但有些场景需要我们提供代码形式。本篇文…

博弈智能的特点

博弈智能是指通过算法和模型对博弈过程进行分析和决策的智能系统。在博弈中&#xff0c;各方参与者追求自身利益和目标&#xff0c;会采取各种策略来达到自己的目标。其中&#xff0c;包括了一些不正当手段&#xff0c;如诡计和欺骗&#xff08;诡&#xff09;&#xff08;诈&a…

理解Oracle闪回级别【Oracle闪回技术】(一)

Oracle闪回技术是数据恢复技术&#xff0c;具有恢复时间快&#xff0c;不适用备份文件。可以使数据库回到某个状态。 可以满足用户的逻辑处理的快速恢复。 但是闪回技术只是逻辑数据恢复&#xff0c;如果是数据文件损坏&#xff0c;必须依赖介质才能恢复。 闪回技术的特性&…