linux程序分析命令(三)

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.mzph.cn/pingmian/11733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Milvus入门初探

引言 Milvus 是一款开源的向量数据库,专为处理向量搜索任务而设计。它支持多种类型的向量,如浮点向量、二进制向量等,并且可以处理大规模的向量数据。Milvus 在 AI 应用中非常流行,尤其是在需要执行相似性搜索或最近邻搜索的场景…

【超详细】跑通YOLOv8之深度学习环境配置3-YOLOv8安装

环境配置3下载安装内容如下: 1、配置清华等镜像源 2、创建环境 3、下载安装Pytorch 4、下载安装YOLOv8运行环境 版本:Python3.8(要求>3.8),torch1.12.0cu113(要求>1.8) 1、配置清华等镜…

算法-卡尔曼滤波之为什么要使用卡尔曼滤波器

假设使用雷达来预测飞行器的位置; 预先的假设条件条件: 1.激光雷达的激光束每5s发射一次; 2.通过接受的激光束,雷达估计目标当前时刻的位置和速度; 3.同时雷达要预测下一时刻的位置和速度 根据速度,加速度和位移的…

ESP32重要库示例详解(三):按键之avdweb_Switch库

在Arduino开发中,我们经常需要处理按钮和开关的输入。avdweb_Switch库就是为了简化这一任务,提供了一个优雅且高效的事件处理方式。本文将通过一个实际示例,介绍该库的主要特性和用法。 导入库 在Arduino IDE导入avdweb_Switch库的步骤如下…

Python---NumPy万字总结【此篇文章内容难度较大,线性代数模块】(3)

NumPy的应用(3) 向量 向量(vector)也叫矢量,是一个同时具有大小和方向,且满足平行四边形法则的几何对象。与向量相对的概念叫标量或数量,标量只有大小,绝大多数情况下没有方向。我们…

家居分类的添加、修改、逻辑删除和批量删除

文章目录 1.逻辑删除家居分类1.将之前的docker数据库换成云数据库2.树形控件增加添加和删除按钮1.找到控件2.粘贴四个属性到<el-tree 属性>3.粘贴两个span到<el-tree>标签里4.代码5.效果6.方法区新增两个方法处理添加和删除分类7.输出查看一下信息8.要求节点等级小…

李开复引领的零一万物开源了Yi-1.5模型,推出了6B、9B、34B三个不同规模的版本

零一万物&#xff0c;由李开复博士引领的AI 2.0公司&#xff0c;近期开源了其备受瞩目的Yi-1.5模型&#xff0c;这一举措再次彰显了公司在人工智能领域的创新实力与开放精神。Yi-1.5模型作为零一万物的重要技术成果&#xff0c;不仅代表了公司在大模型技术研发上的新高度&#…

冥想的时候怎么专注自己

冥想的时候怎么专注自己&#xff1f;我国传统的打坐养生功法&#xff0c;实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐&#xff0c;有上千年之久的功效。因为当你们打坐进入永恒时&#xff0c;时间停止了。这不只是两个半小时&#xff0c;而是百千万亿年…

为什么3d重制变换模型会变形?---模大狮模型网

3D建模和渲染过程中&#xff0c;设计师经常会遇到一个让人头疼的问题&#xff0c;那就是模型在进行重制变换后出现的意外变形。这种变形不仅影响了模型的外观和质量&#xff0c;也给设计工作带来了额外的麻烦。本文将深入探讨3D模型进行重制变换后出现变形的原因&#xff0c;帮…

小王的踩坑日记 之mysql

按天按月按年统计 mysql中dateTime字段提供了 date_format 函数进行格式化该字段显示成期望形式 DATE_FORMAT(date,format) 函数用于以不同的格式显示日期/时间数据。 格式描述%a缩写星期名%b缩写月名%c月&#xff0c;数值%D带有英文前缀的月中的天%d月的天&#xff0c;数值&…

回炉重造java----JVM

为什么要使用JVM ①一次编写&#xff0c;到处运行&#xff0c;jvm屏蔽字节码与底层的操作差异 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下边越界检查 ④多态 JDK&#xff0c;JRE&#xff0c;JVM的关系 JVM组成部分 JVM的内存结构 《一》程序计数器(PC Register) 作用…

傻瓜化备份/恢复K8S集群Etcd数据

前言&#xff1a; 备份重要数据&#xff0c;简化重复操作&#xff0c;让一指禅、点点点也能完成运维任务。 脚本呈现界面如下&#xff1a; 1、查看Etcd版本 rootmaster:~# cat /etc/kubernetes/manifests/etcd.yaml | grep image: | awk {print $2} registry.aliyuncs.com/goo…

数据结构与算法学习笔记五---循环链表的表示和实现(C语言)

目录 前言 1.循环链表的表示和实现 1.初始化 2. 销毁 3. 清空 4. 表空判断 5. 表长 6. 获取循环链表中的元素 7. 直接前驱 8. 直接后继 9. 插入 10. 删除 11. 遍历 12. 测试代码 前言 这篇博客主要介绍C语言中循环链表的表示和实现。 1.循环链表的表示和实现 指…

SpringCloud------Eureka,Ribbon,Nacos

认识微服务 微服务技术栈 微服务概念 微服务结构 微服务技术对比 企业需求 SpringCloud 认识Springcloud 服务拆分及远程调用 每个服务只能查询自己数据库中的表&#xff0c;导致其他服务如果想使用别人的表数据&#xff0c;这就需要进行远程调用&#xff0c;这里使用RestTem…

杨校老师项目之基于51单片机的汽车智能照明系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 科技的发展&#xff0c;人们对汽车的安全性也提出了更高要求。照明系统作为汽车组成部分之一&#xff0c;承担着重要职能&#xff0c;传统汽车智能照明系统已无法…

Spring Boot集成@Async快速入门Demo

1.什么是Async&#xff1f; 当我们在使用SpringBoot进行开发的时候&#xff0c;可能会遇到一些执行异步任务的场景&#xff0c;如果每次执行这些异步任务都去新建一个异步线程来执行的话&#xff0c;那代码就太冗余了。幸好SpringBoot给我们提供了Async的注解&#xff0c;让我…

【云计算小知识】云管理的作用是什么?

云计算已经成为推动企业数字化转型&#xff0c;提升运营效率的重要力量。而在这个过程中&#xff0c;云管理作为确保云计算环境稳定、高效运行的关键环节&#xff0c;其作用愈发凸显。今天我们小编就给大家详细介绍一下云管理的作用是什么&#xff1f; 云管理的作用是什么&…

小程序的小组件

进度的组件 文字换行过滤 以及 排序 简单易懂 只为了记录工作 <template><div><ProgressBar :progress"progress" /><button click"increaseProgress">增加进度</button><view class"goods-name">12…

【408精华知识】提高外部排序速度的三种方式

文章目录 一、败者树二、置换-选择排序三、最佳归并树 一、败者树 还没写完… 二、置换-选择排序 三、最佳归并树 写在后面 这个专栏主要是我在学习408真题的过程中总结的一些笔记&#xff0c;因为我学的也很一般&#xff0c;如果有错误和不足之处&#xff0c;还望大家在评…

Wikimedia To Opensearch

概览 Wikimedia ⇒ Kafka ⇒ OpensearchJava Library&#xff1a;OKhttp3和OkHttp EventSource&#xff1b;生产者&#xff1a;Wikimedia&#xff1a;WikimediaChangeHandler和WikimediaChangeProducer&#xff1b;消费者&#xff1a;Opensearch&#xff1a;OpenSearchConsume…