【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的显示和设置位置


🌞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

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


二、修改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

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

./build_gdb.sh

运行成功截屏如下:

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

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

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

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

相关文章

【vue】v-if 条件渲染

v-if 不适用于频繁切换显示模式的场景 修改web.user&#xff0c;可看到条件渲染的效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

【MATLAB源码-第5期】基于matlab的BPSK的理论误码率和实际误码率对比仿真。

1、算法描述 BPSK (Binary Phase Shift Keying)-------二进制相移键控。是把模拟信号转换成数据值的转换方式之一&#xff0c;利用偏离相位的复数波浪组合来表现信息键控移相方式。BPSK使用了基准的正弦波和相位反转的波浪&#xff0c;使一方为0&#xff0c;另一方为1&#xf…

Vue3大事件项目1 登录注册验证

创建项目 引入 element-ui 组件库 登录&#xff1a;注册样式准备之后&#xff0c;配置校验规则&#xff08;4个条件&#xff1a;一数据、二规则&#xff09; 1. 校验相关 (1) 给当前表单绑上整个的数据对象&#xff1a;el-form > :model"ruleForm" 绑…

Centos7搭建 Skywalking 单机版

介绍 Skywalking是应用性能监控平台&#xff0c;可用于分布式系统&#xff0c;支持微服务、云原生、Docker、Kubernetes 等多种架构场景。 整体架构如图 Agent &#xff1a;在应用中&#xff0c;收集 Trace、Log、Metrics 等监控数据&#xff0c;使用 RPC、RESTful API、Kafk…

JavaScript逆向爬虫——无限debugger的原理与绕过

debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字&#xff0c;只要遇到它&#xff0c;JavaScript 的执行便会在此处中断&#xff0c;进入调试模式。 有了 debugger 这个关键字&#xff0c;就可以非常方便地对 JavaScript 代码进行调试&#xff0c;比如使用 JavaSc…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

蓝桥杯练习题

<1>搜一搜呀——filter 目标 请完善 index.html 文件&#xff0c;让页面具有如下所示的效果&#xff1a; 题解 computed: {filteredList() {// TODO: 请补充代码return this.postList.filter(post>{return post.title.match(this.search)})},}, 过滤器filter 定义…

顺序表实战——基于顺序表的通讯录

前言&#xff1a;本篇文章主要是利用顺序表作为底层&#xff0c; 实现一个通讯录。偏向于应用&#xff0c; 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友&#xff0c; 如果顺序表不会写&#xff0c; 或者说没有自己实现过&#xff0c; 请移步学习顺序表相关内…

springboot 问题整合

springboot 启动后访问报错 问题&#xff1a;org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 原因&#xff1a;mybatis 的全局配置文件和 sql 映射文件没有写 解决&#xff1a;在 application.yml 中添加 mybatis 配置 mybatis:# 全局配…

嵌入式网线连接——笔记本电脑设置

一、需求 我们调试很多设备经常需要用到网线去调试&#xff0c;当然主流是USB&#xff0c;和网线。 二、笔记本电脑端设备 有网口的&#xff0c;非常方便&#xff0c;如果没有网口&#xff0c;则需要用到USB转网口 连接指示灯&#xff1a; 绿色&#xff1a;灯亮表示连接正常…

前端开发攻略---简化响应式设计:利用 SCSS 优雅管理媒体查询

1、演示 2、未优化前的代码 .header {width: 100px;height: 100px;background-color: red; } media (min-width: 320px) and (max-width: 480px) {.header {width: 10px;} } media (min-width: 320px) and (max-width: 480px) {.header {height: 20px;} } media (min-width: 48…

电子元器件商城开发用什么技术框架?

随着信息技术的飞速发展&#xff0c;电子元器件商城已成为电子工程师和采购人员获取元器件的重要渠道。电子元器件商城的开发涉及众多技术和开发语言的选择&#xff0c;本文将详细分析电子元器件商城开发中常用的技术和开发语言&#xff0c;以及它们各自的优势。 一、电子元器…

Ubuntu系统使用Docker本地部署Android模拟器并实现公网访问

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…

【SpringBoot】SpringBoot项目快速搭建

本文将介绍Springboot项目的快速搭建 快速创建SpringBoot项目 打开IDEA在File->New->Project中新建项目 点击左侧的Spring Initializr 输入以下信息&#xff1a; Name 项目名称Group 根据公司域名来&#xff0c;或者默认com.example【倒序域名】Package Name 包名&am…

Ubuntu22.04修改默认窗口系统为X11

Ubuntu22.04安装默认窗口系统为Wayland&#xff08;通过设置->关于可以看到&#xff09;。 一、用Ubuntu on Xorg会话登录 用户登录时&#xff0c;点“未列出”&#xff0c;输入用户名后&#xff0c;在登录界面底部的齿轮图标中&#xff0c;选择 "Ubuntu on Xorg&quo…

php-redis windows ,pecl 已经不维护了,解决方案:php 8.2 | 8.3+ redis extension windows

从论坛上pecl 已经不维护了&#xff0c;直接让大家到ci 去下载 https://stackoverflow.com/questions/76496488/redis-dll-not-found-for-php8-2/76496489#76496489 让我们找最新的一次commit &#xff0c;然后又action 构建&#xff0c;再下载&#xff0c;这样的话也好&#…

基于机器学习的木马检测模型的设计与实现(论文)_kaic

摘 要 科技的发展带来了人们生活的改变&#xff0c;近年来我国网民已突破十亿人口&#xff0c; 而且在后疫 情时代&#xff0c; 经历了疫情时期的一系列线上活动&#xff0c; 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题&#xff…

ISTQB选择国内版,还是国际版呢

1, ISTQB简介 ISTQB&#xff08;International Software Testing Qualifications Board&#xff09;是一个国际软件测试资格认证机构&#xff0c;旨在提供一个统一的软件测试认证标准。ISTQB成立于2002年&#xff0c;是非盈利性的组织&#xff0c;由世界各地的国家或地区软件测…

动态规划刷题(2)之杨辉三角(详细解释)

最近在自学动态规划,网上到处找资料学习: 在这里记录我的刷题历史: 题目都是在力扣里面刷的!! 这里,我放一个刷动态规划的链接在这里:动态规划知识点题库 - 力扣(LeetCode) 力扣 在这里附加动态规划相关知识点:动态规划(DP)-CSDN博客文章浏览阅读197次。动态规划…

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…