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

【core analyzer】core analyzer的介绍和安装详情

目录

🌞1. core和core analyzer的基本概念

🌼1.1 coredump文件

🌼1.2 core analyzer

🌞2. core analyzer的安装详细过程

🌼2.1 方式一 简单但不推荐

🌼2.2 方式二 推荐

🌻2.2.1 安装遇到问题

🌻2.2.2 解决方案

一、修改相关依赖

二、修改build_gdb.sh文件

三、验证解决方案

四、番外

🌞3. 关于核心转储文件core dump的显示和设置位置

🌞4. 其他说明


🌞1. core和core analyzer的基本概念

🌼1.1 coredump文件

Core dump 文件是指在计算机程序崩溃或异常终止时生成的一个包含程序运行时内存快照的文件。这个文件通常包含了程序崩溃时内存中的数据、堆栈跟踪信息以及其他相关的调试信息,可以帮助开发人员分析程序崩溃的原因。

举例来说,假设一个程序在运行时发生了内存访问错误,导致程序崩溃。当这种情况发生时,操作系统通常会生成一个core dump文件,将程序崩溃时的内存状态保存下来。开发人员可以使用调试工具(如GDB)加载core dump文件,以便查看程序崩溃时的内存状态,分析堆栈跟踪信息,并尝试找出程序崩溃的原因。

在UNIX和类UNIX系统中,core dump文件通常以"core"或者"core.xxx"(其中xxx表示一些数字)的形式出现在程序崩溃的工作目录中。

比如我使用的是ubuntu20.04系统,其中core文件内容如下所示【后续会给出详细的配置流程】:


🌼1.2 core analyzer

Core analyzer 是用于分析 core dump 文件的工具或软件。它提供了各种功能,包括解析 core dump 文件中的内存快照、显示堆栈跟踪信息、提取程序状态等。通过 core analyzer,开发人员可以更轻松地诊断程序崩溃的原因,并进行调试和修复。

常见的 core analyzer 工具包括:

  • GDB(GNU调试器):GDB 是一个强大的命令行调试器,可以用于加载 core dump 文件并进行调试。
  • LLDB:LLDB 是一个调试器,与 GDB 类似,用于加载和分析 core dump 文件。
  • Crash:Crash 是一个针对 Linux 系统的命令行工具,用于分析 Linux 内核 core dump 文件。
  • Windows Debugger(WinDbg):WinDbg 是 Windows 平台上的调试工具,可以用于分析 Windows 程序生成的 minidump 文件(类似于 core dump)。

这些工具可以帮助开发人员深入了解程序崩溃时的状态,并帮助他们诊断和解决问题。

详细内容可以参考下面的官方文档:
Core Analyzer Home (sourceforge.net)


🌞2. core analyzer的安装详细过程

🌼2.1 方式一 简单但不推荐

获取官方安装包: Core Analyzer 下载 |SourceForge.net

将其解压完成后放在linux环境中,比如我的放在

1.前往路径

cd core_analyzer_2_16/Linux/

2.编译

make -f makefile

生成内容如下:

3. 检查命令

./core_analyzer --help

显示内容如下:

如果想使用 core_analyzer 分析一个核心转储文件,需要运行类似于以下命令的格式:

./core_analyzer [-b] prog_name cpre_file
  1. 将 prog_name 替换为程序的名称
  2. core_file 替换为核心转储文件的路径和文件名。
  3. 如果你想使用 -b 选项,请将其包含在命令中。

🌼2.2 方式二 推荐

GitHub传送门:GitHub - yanqi27/core_analyzer: A power tool to debug memory-related issues

更新apt

sudo apt update

下载git

apt install git

cd到需要下载项目的下载路径,在此路径下使用git拉取资源

git clone https://github.com/yanqi27/core_analyzer

显示core_analyzer说明git下载成功!

解压后的内容如下,执行build_gdb.sh之前需要先检查权限,没有则根据需要使用chmod配置下:

运行build_gdb.sh,使用

./build_gdb.sh

如果一切正常则最后会输出信息如下:

输入检查是否具备gdb的环境

gdb --version

此时已经安装core analyzer工具成功!


🌻2.2.1 安装遇到问题

在安装过程中【即使用./build_gdb.sh】显示错误如下所示:

最初怀疑是中文路径问题。去除中文路径还是显示同样的错误:

【这里切换centos、ubuntu18等环境也会显示同样的问题、降低gdb版本也没用】


🌻2.2.2 解决方案

一、修改相关依赖

根据错误消息,出现了两个主要的问题:

  • configure 脚本警告缺少或无法使用 expat 库,这可能导致一些功能不可用。
  • configure 脚本检测不到 GMP 库,导致了 configure 过程的失败。

针对这两个问题,需要安装相应的依赖项。以下是解决方法:

首先更新apt:

sudo apt update

解决 expat 问题:

sudo apt install libexpat1 libexpat1-dev

解决 GMP 问题:

sudo apt install libgmp-dev

另外也需要检查自己是否安装下面的依赖项:

解决makeinfo 工具

sudo apt install texinfo

安装 GNU make

sudo apt install make

下载gdb12.1

apt install gdb

手动修改配置依赖确保安装成功。


二、修改build_gdb.sh文件

主要有以下几个方面:

  1. 更改python的环境位置【$PWD/../configure -disable-binutils --with-python=/usr/bin/python3.10 --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof --with-static-standard-libraries CXXFLAGS='-O0 -g' CFLAGS='-O0 -g' --prefix=/root/host/core_analyzer/gdb】
  2. 检查build/gdb-12.1的config【需要逐步运行检查错误】
  3. make运行的并行任务【默认4个并行任务9,这里根据自己的配置修改】
  4. 查看下面链接的docker内容【docker生成编译这个里面都是到编译是正常,这个也是奇怪,make test的时候出现问题;这个脚本编译出来的跟他sourceforge页面里面不一样,没有core_analyzer】
    传送门:core_analyzer/Dockerfile at master · yanqi27/core_analyzer · GitHub

其中我修改的build_gdb.sh文件内容如下:

#!/usr/bin/env bash# ==============================================================================================
# FILENAME	:	build_gdb.sh
# AUTHOR	:	Celthi
# CREATION	:	2021-12-14
# Script to build the custom gdb with core analyzer.
# This script will the do the following steps
# 1. Create working directory
# 2. download the gdb 9.2 from gnu.org
# 3. copy the core analyzer code to the gdb
# 4. build the gdb
# ==============================================================================================set -e
gdb_version="12.1"
if [ "$#" -ne 1 ]
thenecho "build gdb 12.1"
elsegdb_version=$1
fiPROJECT_FOLDER=$(pwd)
echo "Current project folder is $PROJECT_FOLDER"
echo "installing gdb $gdb_version..."
build_folder=$PROJECT_FOLDER/build
mkdir -p $build_folder
cd $build_folder
gdb_to_install="gdb-$gdb_version"
tar_gdb="${gdb_to_install}.tar.gz"
if [ ! -f $tar_gdb ]
thenwget http://ftp.gnu.org/gnu/gdb/$tar_gdb
fi
if [ ! -d $gdb_to_install ]
thentar -xvf $tar_gdb
fi
cp -rLvp $PROJECT_FOLDER/gdbplus/gdb-$gdb_version/gdb $build_folder/gdb-$gdb_version/cd $gdb_to_installif [ $gdb_version == "9.2" ]; thensed -i '20d' ./gdb/nat/amd64-linux-siginfo.csed -i '21i #include <signal.h>' ./gdb/nat/amd64-linux-siginfo.c
fimkdir -p build
cd buildecho "building..."
PWD=$(pwd)
# if you prefer the gdb with debug symbol use commented line to build
$PWD/../configure -disable-binutils --with-python=/usr/bin/python3.10 --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof --with-static-standard-libraries CXXFLAGS='-O0 -g' CFLAGS='-O0 -g' --prefix=/root/host/core_analyzer/gdb#$PWD/../configure --with-python --prefix=/usr
make -j 4 && sudo make install # do not remove the build folder && rm -rf $build_folder
echo "if you want to remove the build folder, please run \"rm -rf $build_folder\""

因为修改了build_gdb.sh内容,我们需要前往/usr/bin/目录下

cd usr/bin/

下载python3.10

sudo apt install python3.10

检查安装路径: 安装完成后,确保 Python 3.10 已经正确安装到了 /usr/bin/python3.10

配置环境变量: 如果希望在命令行中直接使用 python3.10 命令来启动 Python 3.10 解释器,可以将 /usr/bin/python3.10 添加到 PATH 环境变量中。

nano ~/.bashrc

在末尾添加:

#python env
export PATH=/usr/bin/python3.10:$PATH

如下所示

然后运行以下命令使其生效:

source ~/.bashrc

验证安装: 运行以下命令来验证 Python 3.10 是否已成功安装,并且可以正常使用:

python3.10 --version

终端输出 Python 3.10.x 的版本号:


三、验证解决方案

希望节约时间可以先前往

cd /root/host/core_analyzer/build/gdb-12.1/build

检验配置

../configure -disable-binutils --with-python=/usr/bin/python3.10 --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof --with-static-standard-libraries CXXFLAGS='-O0 -g' CFLAGS='-O0 -g' --prefix=/root/host/core_analyzer/gdb

编译

make

如果这里显示错误:

清理环境:运行 make distclean 命令以清理之前的构建环境和配置缓存。

make distclean

重新构建:重新执行 make 命令以构建GDB。

make

如果上述没问题了,最后再次运行【也可以跳过在cd /root/host/core_analyzer/build/gdb-12.1/build路径下的操作,其实等价,但在那里单独测试会更容易定位错误】

cd /root/host/core_analyzer
./build_gdb.sh

运行成功截屏如下:

上述流程我测试了在 CentOS 7, 8、ubuntu18.04, 20.04在gdb版本12.1下可以正常

./build_gdb.sh

如果还有问题请查看四、番外


四、番外

如果还是./build_gdb.sh失败,可以根据官方给定的测试平台修改自己的配置:

测试平台

最新版本已在以下平台上通过了构建和健全性测试(有少量例外情况),这些平台使用了各种版本的堆管理器、gdb和操作系统。

  • Heap Manager

    • glibc/ptmalloc 2.17, 2.27 - 2.37
    • gperftools/tcmalloc 2.7 - 2.10
    • jemalloc 5.3.0, 5.2.1, 5.2.0
    • Windows/mscrt 9, 10, 11
    • Darwin
  • gdb

    • 7.1.11, 8.1, 9.2, 12.1
    • 1824 (Darwin)
  • OS

    • Ubuntu 16.04, 18.04, 20.04, 22.04, 23.04; Debian 11, 12
    • Redhat 8, 9; CentOS 7, 8; fedora 36, 37
    • Suse 15
    • Windows 9, 10, 11
  • Compiler

    • gcc
    • VS2019

🌞3. 关于核心转储文件core dump的显示和设置位置

修改coredump文件的存储路径和显示,参考文章:
【Core dump】关于core的相关配置:关于核心转储文件core dump的显示和设置位置


🌞4. 其他说明

我在使用./build_gdb.sh过程中发现,其中在gdb-12.1中的代码会显示warning。

具体详细内容如下:

/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c: In function ‘int putop(const char*, int)’:
/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c:8056:41: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]8056 |                                 case_Q: if (intel_syntax && !alt)|                                         ^~
/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c:154:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’154 |   {                                                     \|   ^
/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c:8057:47: note: in expansion of macro ‘USED_REX’8057 |                                         break;USED_REX(REX_W);|                                               ^~~~~~~~
/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c: In function ‘unsigned char get_vex_imm8(int, int)’:
/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c:10303:41: warning: this statement may fall through [-Wimplicit-fallthrough=]
10303 |                                         if (modrm.rm != 6)|                                         ^~
/root/host/core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c:10306:33: note: here
10306 |  

但不影响正常使用,这里是core_analyzer/build_gdb.sh下载的core_analyzer/build/gdb-12.1/build/../gdb/i386-decode.c里面的一些问题【有时间再改改哈哈...】

相关文章:

【core analyzer】core analyzer的介绍和安装详情

目录 &#x1f31e;1. core和core analyzer的基本概念 &#x1f33c;1.1 coredump文件 &#x1f33c;1.2 core analyzer &#x1f31e;2. core analyzer的安装详细过程 &#x1f33c;2.1 方式一 简单但不推荐 &#x1f33c;2.2 方式二 推荐 &#x1f33b;2.2.1 安装遇到…...

个人练习之-jenkins

虚拟机环境搭建(买不起服务器 like me) 重点: 0 虚拟机防火墙关闭 systemctl stop firewalld.service systemctl disable firewalld.service 1 (centos7.6)网络配置 (vmware 编辑 -> 虚拟网络编辑器 -> 选择NAT模式 ->NAT设置查看网关) vim /etc/sysconfig/network-sc…...

初探vercel托管项目

文章目录 第一步、注册与登录第二步、本地部署 在个人网站部署的助手vercel&#xff0c;支持 Github部署&#xff0c;只需简单操作&#xff0c;即可发布&#xff0c;方便快捷&#xff01; 第一步、注册与登录 进入vercel【官网】&#xff0c;在右上角 login on&#xff0c;可登…...

软考 - 系统架构设计师 - 质量属性例题 (2)

问题1&#xff1a; 、 问题 2&#xff1a; 系统架构风险&#xff1a;指架构设计中 &#xff0c;潜在的&#xff0c;存在问题的架构决策所带来的隐患。 敏感点&#xff1a;指为了实现某个质量属性&#xff0c;一个或多个构件所具有的特性 权衡点&#xff1a;指影响多个质量属性…...

基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 2024最新项目 项目介绍 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了…...

【已开源】​基于stm32f103的爬墙小车

​基于stm32f103的遥控器无线控制爬墙小车&#xff0c;实现功能为可平衡在竖直墙面上&#xff0c;并进行移动和转向&#xff0c;具有超声波防撞功能。 直接上&#xff1a; 演示视频如&#xff1a;哔哩哔哩】 https://b23.tv/BzVTymO 项目说明&#xff1a; 在这个项目中&…...

PCL 基于马氏距离KMeans点云聚类

文章目录 一、简介二、算法步骤三、代码实现四、实现效果参考资料一、简介 在诸多的聚类方法中,K-Means聚类方法是属于“基于原型的聚类”(也称为原型聚类)的方法,此类方法均是假设聚类结构能通过一组原型刻画,在现实聚类中极为常用。通常情况下,该类算法会先对原型进行初始…...

libVLC 视频窗口上叠加透明窗口

很多时候&#xff0c;我们需要在界面上画一些三角形、文字等之类的东西&#xff0c;我们之需要重写paintEvent方法&#xff0c;比如像这样 void Widget::paintEvent(QPaintEvent *event) 以下就是重写的代码。 void Widget::paintEvent(QPaintEvent *event) {//创建QPainte…...

MySQL基础入门上篇

MySQL基础 介绍 mysql -uroot -p -h127.0.0.1 -P3306项目设计 具备数据库一定的设计能力和操作数据的能力。 数据库设计DDL 定义 操作 显示所有数据库 show databases;创建数据库 create database db02;数据库名唯一&#xff0c;不能重复。 查询是否创建成功 加入一些…...

Docker搭建FFmpeg

FFmpeg 是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的完整解决方案。FFmpeg 包含了领先的音视频编解码库libavcodec&#xff0c;可以用于各种视频格式的转换。 应用场景包括&#xff1a; 视频转换&#xff1a;把视频从一种格式转换成另一种格式。视…...

Hudi-ubuntu环境搭建

hudi-ubuntu环境搭建 运行 1.编译Hudi #1.把maven安装包上传到服务器 # 官网下载安装包 https://archive.apache.org/dist/maven/maven-3/ scp -r D:\Users\zh\Desktop\Hudi\compressedPackage\apache-maven-3.6.3-bin.tar.gz zhangheng10.8.4.212:/home/zhangheng/hudi/com…...

Hive进阶Day05

一、HDFS分布式文件存储系统 1-1 HDFS的存储机制 按块&#xff08;block&#xff09;存储 hdfs在对文件数据进行存储时&#xff0c;默认是按照128M(包含)大小进行文件数据拆分&#xff0c;将不同拆分的块数据存储在不同datanode服务器上 拆分后的块数据会被分别存储在不同的服…...

ssh爆破服务器的ip-疑似肉鸡

最近发现自己的ssh一直有一些人企图使用ssh暴力破解的方式进行密码破解.就查看了一下,真是网络安全太可怕了. 大家自己的服务器密码还是要设置好,管好,做好最基本的安全措施,不然最后只能沦为肉鸡. ssh登陆日志可以在/var/log下看到,ubuntu的话为auth.log,centos为secure文件 查…...

4.JVM八股

JVM空间划分 线程共享和线程私有 1.7&#xff1a; 线程共享&#xff1a; 堆、方法区 线程私有&#xff1a; 虚拟机栈、本地方法栈、程序计数器 本地内存 1.8&#xff1a; 线程共享&#xff1a; 堆 线程私有&#xff1a; 老三样 本地内存&#xff0c;元空间 程序计数器 …...

内网渗透系列-mimikatz的使用以及后门植入

内网渗透系列-mimikatz的使用以及后门植入 文章目录 内网渗透系列-mimikatz的使用以及后门植入前言mimikatz的使用后门植入 msf永久后门植入 &#xff08;1&#xff09;Meterpreter后门&#xff1a;Metsvc&#xff08;2&#xff09;Meterpreter后门&#xff1a;Persistence NC后…...

5G网络开通与调测ipv4

要求如下&#xff1a; 1. 勘站规划 1. 【重】首先观察NR频点&#xff0c;完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下&#xff1a;观察AAU的通道数&#xff0c;最大发射功率&#xff1b;选择N41的选型频段也要选41 2. …...

Spark开窗函数之ROW

Spark 1.5.x版本以后,在Spark SQL和DataFrame中引入了开窗函数,其中比较常用的开窗函数就是row_number 该函数的作用是根据表中字段进行分组,然后根据表中的字段排序;其实就是根据其排序顺序,给组中的每条记录添 加一个序号;且每组的序号都是从1开始,可利用它的这个特性进行分组…...

双向链表的实现(详解)

目录 前言初始化双向链表的结构为双向链表的节点开辟空间头插尾插打印链表尾删头删查找指定位置之后的插入删除pos节点销毁双向链表 前言 链表的分类&#xff1a; 带头 不带头 单向 双向 循环 不循环 一共有 (2 * 2 * 2) 种链表 带头指的是&#xff1a;带有哨兵位节点 哨兵位&a…...

SpringBoot项目中如何使用校验工具

用到hutool提供的校验方法与java提供的校验方法 1. 声明数据 String str "123" String regex "^123456$" Boolean is1_6 mismatch(str, regex);2. 定义校验方法 // 校验是否不符合正则格式 private static boolean mismatch(String str, String rege…...

AI预测小分子与蛋白的相关特征: MegaMolBART, MoFlow,ESM-1, ESM-2

1、小分子:MegaMolBART, MoFlow 1)MegaMolBART https://github.com/NVIDIA/MegaMolBART 基于 SMILES 的小分子药物发现与化学信息学深度学习模型。 2)MoFlow https://github.com/calvin-zcx/moflow 用flow流方式分子生成 2、蛋白质:ESM-1, ESM-2 https://github.com/fa…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...