如何解析 Impala 的 C++ 报错堆栈

news2024/12/27 15:02:29

生产环境用的都是release build,C++代码产生的报错堆栈里没有函数名,很难像Java报错堆栈那样方便定位问题。下面是一个常见的启动报错,一般在CLASSPATH设置有误时发生:

I0619 19:13:00.951988  5279 status.cc:129] Failed to find JniUtil class.
    @           0xfceac4
    @          0x1a63a65
    @           0xfb206f
    @          0x1767faa
    @           0xdb91f4
    @     0x7f1de9361c87
    @           0xe5956a

这里好在报错信息说了是JniUtil类找不到,大概能定位问题。但有时候报错信息有限,还是得知道堆栈才好定位。如上的堆栈其实提供了代码地址,只要把可执行文件反汇编出来,很多函数名还是可以找到的。下面就以这个堆栈为例,介绍如何手动解析函数名。

首先把impalad可执行文件反汇编,直接用 objdump 指令的 -d 选项:

objdump -d be/build/release/service/impalad > impalad.asm

然后按堆栈里的地址在汇编代码里搜索。比如上面第一个地址是 0xfceac4,把前缀 0x 去掉,可以搜到如下代码:
反汇编代码示例
这里的第一列就是代码地址,0xfceac4的上一行是个 callq 指令,栈里保存的其实就是函数调用后的返回地址,也就是 callq 指令的下一行地址。因此我们得知,最上一层是在调用 _ZN6impala13GetStackTraceB5cxx11Ev 函数。

用同样的方法可以手动解析出好几个函数名:

_ZN6impala13GetStackTraceB5cxx11Ev
_ZN6impala6StatusC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
_ZN6impala7JniUtil4InitEv
_ZN6impala17InitCommonRuntimeEiPPcbNS_8TestInfo4ModeEb
_Z11ImpaladMainiPPc

但到 0x7f1de9361c87 会发现找不到代码了,这个是动态链接的地址,只有在运行时把 so 文件加载进来才有。另外类似的还有 codegen 函数的地址,在反汇编代码里也是找不到的,因为 codegen 代码是运行时生成的。

跳过0x7f1de9361c87,下一个地址是 0xe5956a,这个在反汇编代码里还能找到:
在这里插入图片描述
从这里可以看到,当前函数是 _start,调用了 __libc_start_main@GLIBC_2.2.5。因此 0x7f1de9361c87 其实就是 __libc_start_main@GLIBC_2.2.5。

把手动解析的函数名堆起来,我们得到

_ZN6impala13GetStackTraceB5cxx11Ev
_ZN6impala6StatusC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
_ZN6impala7JniUtil4InitEv
_ZN6impala17InitCommonRuntimeEiPPcbNS_8TestInfo4ModeEb
_Z11ImpaladMainiPPc
__libc_start_main@GLIBC_2.2.5
_start

这些是符号,还可以解析成更可读的形式。网上搜 “demangle online”,随便找一个网站,如 http://demangler.com/
把上面的堆栈贴进去解析,就得到:

impala::GetStackTrace[abi:cxx11]()
impala::Status::Status(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
impala::JniUtil::Init()
impala::InitCommonRuntime(int, char**, bool, impala::TestInfo::Mode, bool)
ImpaladMain(int, char**)
__libc_start_main@GLIBC_2.2.5
_start

这基本上就跟debug build得到的堆栈一样了。另外,其实release build也可以显示解析好函数的堆栈,只需要在启动函数里加上 --symbolize_stacktrace=true 就行了(这其实是 glog 的一个参数)。打开 symbolize_stacktrace 后,使用 release build 产生的报错也就跟 debug build 一样了:

I0619 19:15:49.289554  6652 status.cc:129] Failed to find JniUtil class.
    @           0xfceac4  impala::Status::Status()
    @          0x1a63a65  impala::JniUtil::Init()
    @           0xfb206f  impala::InitCommonRuntime()
    @          0x1767faa  ImpaladMain()
    @           0xdb91f4  main
    @     0x7f749db4fc87  __libc_start_main
    @           0xe5956a  _start

总结

Impala C++代码的报错堆栈是使用glog打印的,可以从函数地址手动解析出函数名,也可以在启动参数里加 --symbolize_stacktrace=true 让 glog 打印带符号(函数名)的堆栈。

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

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

相关文章

【全新升级版】R语言实战(第3版),超过30万学习者入手的R语言教程

在我刚入学那会儿初次接触R语言&#xff0c;看的第一本工具书就是《R语言实战》&#xff0c;收获良多&#xff0c;当时还只是第二版。最近和人民邮电出版社的好朋友交流发现&#xff0c;他告诉我上个月刚刚出版了《R语言实战 第三版》 &#xff0c;豆瓣评分9.2&#xff0c;被称…

Linux之生产者消费者模型(上)——单生产者单消费者

文章目录 前言一、生产者消费者模型1.生产消费2.生产消费关系321原则生产消费模型的特点 二、基于阻塞队列&#xff08;blockqueue&#xff09;的生产消费模型1.概念2.单生产单消费模型代码运行分析两种情况导致的现象生产者生产的慢&#xff0c;消费者消费的快生产者生产的快&…

精彩回顾 | “XR云新未来:弹性算力赋能可交互、沉浸式商业实践” 赋能云端虚拟世界

6月15日&#xff0c;由平行云联合首都在线共同主办&#xff0c;中关村软件园协办&#xff0c;以“XR云新未来|弹性算力赋能可交互、沉浸式商业实践”为主题的XR行业交流盛会在北京成功举办。 活动邀请多位XR行业大咖&#xff0c;共同见证首都在线联合平行云发布Cloud XR平台。…

MySQL数据库——索引

MySQL数据库——索引 一、索引基本常识1.索引的概念2.索引的作用3.创建索引的依据 二、索引的分类1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 三、索引的查看与删除1.查看索引2.删除索引 一、索引基本常识 数据库索引是数据库管理系统中一个排序的数据结构&#xff0…

OpenGL 深度测试

1.简介 深度缓冲就像颜色缓冲(Color Buffer)&#xff08;储存所有的片段颜色&#xff1a;视觉输出&#xff09;一样&#xff0c;在每个片段中储存了信息&#xff0c;并且&#xff08;通常&#xff09;和颜色缓冲有着一样的宽度和高度。深度缓冲是由窗口系统自动创建的&#xf…

6 从0开始学PyTorch | 构建模型、损失函数、广播机制

前面都在学一些PyTorch的基本操作&#xff0c;从这一节开始&#xff0c;真正进入到模型训练的环节了。原作者很贴心的一步步教我们实现训练步骤&#xff0c;并且还从一个最简单的例子出发&#xff0c;讲了优化方案。 宏观上的训练过程 image.png 当然这里所说的训练还没有到深…

vue进阶-vue-cli

CLI是Command-Line Interface&#xff0c;翻译为命令行界面&#xff0c;但是俗称脚手架。 Vue-CLI是一个官方发布 vue.js 项目脚手架&#xff0c;使用 vue-cli 可以快速搭建 Vue 开发环境以及对应的 webpack 配置。 vue项目相关文件以 .vue 为后缀&#xff0c;需要事先安装 N…

【LeetCode热题100】打卡第25天:柱状图中最大的矩形

文章目录 柱状图中最大的矩形⛅前言&#x1f512;题目&#x1f511;题解 柱状图中最大的矩形 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xf…

GEE:绘制一个点的Landsat1985-2020年逐日NDVI时间序列折线图

作者:CSDN @ _养乐多_ 本文记录了在GoogleEarthEngine(GEE)平台上选择一个点,根据该点在时间段内所有有效像素值绘制折线图的代码。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 var roi = geometry Map.addLayer(roi, {color

6.15集合1 和 泛型

举例 1&#xff1a;中药店&#xff0c;每个抽屉外面贴着标签 举例 2&#xff1a;超市购物架上很多瓶子&#xff0c;每个瓶子装的是什么&#xff0c;有标签 举例 3&#xff1a;家庭厨房中 集合 我们接下来要学习的内容是Java基础中一个很重要的部分&#xff1a;集合 1 Coll…

【服务器数据恢复】AIX下raid故障导致pool无法加载的数据恢复案例

服务器数据恢复环境&#xff1a; IBM P740小型机AIX操作系统Sybase数据库V7000存储。V7000存储配置了12块SAS机械硬盘&#xff08;其中一块为热备盘&#xff09;组建一组raid5磁盘阵列。存储设备一共创建了2组Mdisk&#xff0c;加到一个pool中。 服务器故障&#xff1a; IBM V…

网络管理与维护(三)网络安全

网络安全 网络安全威胁 非授权访问 信息泄漏 破坏数据完整性 拒绝服务攻击 利用网络传播病毒 安全服务和安全机制 总结 1.通常可以把网络信息安全的问题划分为物理层、网络层、数据层和内容层四个层面。 2.网络存在的威胁主要表现&#xff1a; 非授权访问、信息泄漏、破坏数…

基于Django+Vue开发的社区疫情管理系统(附源码)

基于Django、Django Rest framework、Vue的前后端分离的社区疫情管理系统。 一、系统功能 用户管理&#xff08;只有管理员有权限&#xff09; 用户注册用户登录修改用户信息删除用户修改密码权限管理 首页数据展示 国内疫情数据展示国内疫情新闻近30日的感染人数&#xff08;…

【论文阅读】Adap-t: Adaptively Modulating Embedding Magnitude for Recommendation

【论文阅读】Adap-&#x1d70f;: Adaptively Modulating Embedding Magnitude for Recommendation 文章目录 【论文阅读】Adap-&#x1d70f;: Adaptively Modulating Embedding Magnitude for Recommendation1. 来源2. 介绍3. 模型解读3.1 准备工作3.1.1 任务说明3.1.2 基于嵌…

Linux:http服务(Apache 2.4.57)源码编译——配置网站 || 入门到入土

目录 1.下载源码包 2.配置httpd运行环境 3.编译源码包安装apache软件 4.优化执行路径 5.添加httpd系统服务 正文 1.httpd服务器的基本配置 2.本章持续更新 我的服务器为centos7系统 1.下载源码包 访问官方网站↓↓↓ Welcome! - The Apache HTTP Server Project ↑↑…

ONLYOFFICE Docs 7.4 版本大大增强了图形编辑功能!

ONLYOFFICE Docs 7.4 版本大大增强了图形编辑功能&#xff01; 书接上文&#xff1a; 北冰洋汽水我的最爱https://mp.weixin.qq.com/s?__bizMzI2MjUyNzkyNw&mid2247493734&idx1&sn416c4ee5756ea59883591d3c2c4a6ae4&chksmea4b66bedd3cefa89050e25b661e0be16…

malloc 背后的虚拟内存 和 malloc实现原理

面试的时候经常会被问到 malloc 的实现。从操作系统层面来说&#xff0c;malloc 确实是考察面试者对操作系统底层的存储管理理解的一个很好的方式&#xff0c;涉及到虚拟内存、分页/分段等。下面逐个细说。 1. 虚拟内存 首先需要知道的是程序运行起来的话需要被加载的物理内存…

spark 和 flink 的对比

一、设计理念 Spark 的数据模型是 弹性分布式数据集 RDD(Resilient Distributed Dattsets)&#xff0c;这个内存数据结构使得spark可以通过固定内存做大批量计算。初期的 Spark Streaming 是通过将数据流转成批 (micro-batches)&#xff0c;即收集一段时间(time-window)内到达的…

【计算机组成原理】——知识点复习(期末不挂科版)

课本&#xff1a; 考试题型&#xff1a; 题型一、计算题&#xff08;30分&#xff09; 1、定点数表示&#xff1a;用原码、反码、补码、移码表示十进制数&#xff08;5分&#xff09; 2、浮点数表示&#xff1a;十进制数↔单精度浮点数&#xff08;5分&#xff09; 3、加减运…

行业报告 | AI+制造业赋能,机器视觉开启掘金新大陆(上)

原创 | 文 BFT机器人 01 核心要点 Al制造业赋能&#xff0c;META 发布 SAM 助力机器视觉迎来 GPT 时刻。 机器视觉技术使得工业设备能够“看到”它正在进行的操作并进行快速决策&#xff0c;完整机器视觉系统由硬件软件组成,分别进行成像和图像处理工作。 目前&#xff0c;以“…