【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里面的一些问题【有时间再改改哈哈...】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816221.shtml

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

相关文章

TCP/IP 协议栈在 Linux 内核中的 运行时序分析

1、Linux内核概述 1.1 Linux内核结构 一个完整的Linux内核一般由5部分组成&#xff0c;它们分别是内存管理、进程管理、进程间通信、bai虚拟文件系统和网络接口。 1、内存管理 内存管理主要完成的是如何合理有效地管理整个系统的物理内存&#xff0c;同时快速响应内核各个子…

数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔

总结 本系列是数据可视化基础与应用的第04篇seaborn&#xff0c;是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。 参考 参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》&#xff0c;快来看看吧 数据集地址 h…

B3647 【模板】Floyd

【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m&#xff0c;分别代表点的个数和边的条数。 接下来 m m m 行&#xff0c;每行三个整数 u …

dalle2介绍

dalle2是一个基于强化学习的图像生成模型&#xff0c;是dalle模型的改进版本。它由OpenAI团队开发&#xff0c;旨在生成高质量的、多样化的图像。 dalle2的核心思想是利用强化学习将图像生成过程转化为一个马尔可夫决策过程。它采用了一个称为"敌对生成网络"&#x…

7 种实现 CSS 三角形的原理与方法 以及 三角形在网页设计中的作用

三角形在网页设计中不仅是图形设计的基本元素&#xff0c;更是实现视觉引导、空间构建、情绪传达、品牌塑造、性能优化以及创新表达的重要工具。其广泛应用和多功能性使其成为设计师手中不可或缺的设计语言组成部分。本文介绍了7种CSS实现三角形的方法。 CSS实现三角形主要有以…

Gin中间件函数原理

在Gin框架中&#xff0c;Context.Next() 方法是中间件处理的核心&#xff0c;它控制着请求处理链&#xff08;HandlersChain&#xff09;中的执行流。下面是对这个函数及相关概念的详细解释&#xff1a; func (c *Context) Next() 这个方法定义在 Context 结构体上&#xff0c…

MYSQL执行过程和顺序详解

一、前言 1.1、说明 就MySQL在执行过程、sql执行顺序&#xff0c;以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上&#xff0c;会增加自己的理解、看法&#xff0c;希望本文章能够在您的学习中提供帮助。 如有错误的地方&#xff0c;欢迎指出纠错&…

AdaBoost 算法

目录 什么是 AdaBoost 算法? Adaboost 的 7 个优缺点 集成学习:人多力量大: Bagging:民主。Boosting :挑选精英。长短期记忆网络:引入遗忘机制 生成对抗网络 :物竞天择适者生存 首先,了解一下集成学习及 Boosting 算法 集成学习归属于机器学习,他是一种「训练思路…

Project Euler_Problem 159_Digital Root Sums of Factorisations

原题目&#xff1a; 解题思路&#xff1a; 代码&#xff1a; void solve() {ll i, j,k,x,y,z,p,q,u,v;N 1000000, NN 1024;//N 20;double a, b, c,d;M.NT.get_prime_Euler(2000000);for (i 2; i < N; i) {x (i-1)%91;for (j 2; j<sqrt(i); j) {if (i % j 0) {x …

SynchronizedMap 和 ConcurrentHashMap 有什么区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SynchronizedMap 和 ConcurrentHashMap 有什么区别 锁的粒度:SynchronizedMap 使用全局锁,而 ConcurrentHashMap 使用锁分离技术,每个段有自己的…

宝妈如何在家创造收入?五种兼职工作让你轻松赚钱!

许多宝妈为了陪伴孩子成长&#xff0c;毅然选择了全职妈妈的角色&#xff0c;然而&#xff0c;她们内心仍希望能有一份收入&#xff0c;实现经济独立。于是&#xff0c;寻找既能照顾家庭又能赚钱的工作成了她们的迫切需求。 然而&#xff0c;这样的需求也往往让宝妈们成为一些…

WLAN故障处理

目录 一.wlan基础知识 1.wlan是什么 2.WLAN配置步骤 &#xff08;1&#xff09;AP上线 &#xff08;2&#xff09;业务配置 二.WLAN故障处理一般步骤 1.评估故障严重程度 2.收集信息填写故障报告 &#xff08;1&#xff09;组网信息 (2)运行状态 &#xff08;3&#…

Linux三剑客-sed、awk、egrep(上)

一、知识梗概 二、正则表达式 定义&#xff1a;正则表达式是一种强大的文本处理工具&#xff0c;用于在文本中搜索符合特定模式的字符串。它由一系列特殊字符和普通字符组成&#xff0c;可以定义复杂的搜索模式。正则表达式被广泛应用于各种编程语言和文本处理工具中。 简单来…

antDesignVue 使用-持续更新

背景 vue3viteantdesignvuevue-router 1,全局完整注册 1.1下载antdesignvue npm i --save ant-design-vue 或者 npm install ant-design-vuenext --save 1.2在mian.ts中引入 import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue …

微信跳转页面时发生报错

报错如下图所示&#xff1a; 解决方法&#xff1a;&#xff08;从下面四种跳转方式中任选一种&#xff0c;哪种能实现效果就用哪个&#xff09; 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

读书笔记:高效能人士的七个习惯

前言 恐惧感和不安全感 现代社会&#xff0c;太多的人饱受恐惧感的折磨。他们恐惧将来&#xff0c;恐惧失业&#xff0c;恐惧无力养家。这种弱点&#xff0c;常常助长了一种倾向&#xff1a;无论在工作时&#xff0c;还是回到家中&#xff0c;都倾向于零风险的生活&#xff0…

MathType2024中文网站7.9最新版本数学公式编辑器下载

MathType是一款专业的数学公式编辑器&#xff0c;由Design Science公司开发。它为用户提供了一个便捷的方式来创建和编辑复杂的数学公式&#xff0c;适用于各种文档和出版物。MathType与常见的文字处理软件和演示程序配合使用&#xff0c;能够在各种文档中加入复杂的数学公式&a…

【MYSQL】MySQL整体结构

无论你是前端还是后端&#xff0c;只要是一个合格的开发者&#xff0c;对于MySQL这个名词相信都不陌生&#xff0c;MySQL逐渐成为了最受欢迎的关系型数据库&#xff0c;无论你是大前端&#xff0c;亦或是Java、Go、Python、C/C、PHP....等这些语言的程序员&#xff0c;对于MySQ…

Linux下SPI驱动:SPI主机驱动简介

一. 简介 SPI 驱动框架和 I2C 很类似&#xff0c;都分为主机控制器驱动和设备驱动&#xff0c;主机控制器也就是 SOC的 SPI 控制器接口。 例如&#xff0c;在裸机篇中的《第二十七章 SPI 实验》&#xff0c;我们编写了 bsp_spi.c 和 bsp_spi.h 这两个文件&#xff0c;这…

Java类与对象:面向对象编程的基石

Java类与对象&#xff1a;面向对象编程的基石 1. 类与对象的概念2. 类的创建与使用3. 对象的创建与使用4. 类与对象的关系5. 封装与继承6. 示例代码解析7. 总结 在Java编程中&#xff0c;类与对象是面向对象编程的基础&#xff0c;它们为我们提供了一种抽象和封装的方法来描述现…