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

getaddrinfo调用crash 的debug过程

         前两天,产线报一例crash问题。拿到core文件后,栈展开信息:

(gdb) bt
#0  0x00007f64a3651aff in raise () from /lib64/libc.so.6
#1  0x00007f64a3624ea5 in abort () from /lib64/libc.so.6
#2  0x00007f64a3694097 in __libc_message () from /lib64/libc.so.6
#3  0x00007f64a369415a in __libc_fatal () from /lib64/libc.so.6
#4  0x00007f64a374fc44 in __netlink_assert_response () from /lib64/libc.so.6
#5  0x00007f64a374c762 in __netlink_request () from /lib64/libc.so.6
#6  0x00007f64a374c901 in getifaddrs_internal () from /lib64/libc.so.6
#7  0x00007f64a374d608 in getifaddrs () from /lib64/libc.so.6
#8  0x00007f64a47ecdd0 in bsd_localinfo (return_result=0x7f649d12a6b8, hints=0x7f649d12a6f0) at su_localinfo.c:1167
#9  su_getlocalinfo (hints=hints@entry=0x7f649d12a7d0, return_localinfo=return_localinfo@entry=0x7f649d12a7c8) at su_localinfo.c:242
#10 0x00007f64a47ca9ea in soa_init_sdp_connection_with_session (ss=ss@entry=0x7f64880603a0, c=0x7f649d12a940, buffer=buffer@entry=0x7f649d12a9a0 "10.10.50.52", sdp=sdp@entry=0x7f649d12a9e0) at soa.c:2326
......

看来像是getifaddrs 调用出了什么问题。拿不到产线的系统日志。幸运的是栈里保留了一点信息,跳转到第四帧,查看下汇编:

(gdb) f 4
#4  0x00007f64a374fc44 in __netlink_assert_response () from /lib64/libc.so.6
(gdb) disassemble 

 从这里看,触发crash前应该有打印出什么信息,把寄存器指向的内存解出来看看:

(gdb) x/s $r12
0x7f649d129380:	"Unexpected error 9 on netlink descriptor 19.\n"

找到了gilbc的打印内容:  "Unexpected error 9 on netlink descriptor 19.\n",知道error number为9 (EBADF) ,操作的FD值为19。

外事不明问谷歌,找到这个:

https://stackoverflow.com/questions/58827641/getaddrinfo-calls-assert-in-the-program/59615786#59615786https://stackoverflow.com/questions/58827641/getaddrinfo-calls-assert-in-the-program/59615786#59615786似乎是对应上了这段说明:

This is a file descriptor race in the application. The typical scenario for error 9 (EBADF) looks like this:

  1. Thread A closes a file descriptor.
  2. Thread B calls getaddrinfo and opens a Netlink socket. It happens to receive the same descriptor value.
  3. Due to a bug, thread A closes the same file descriptor again. Normally, that would be benign, but due to the concurrent execution, the Netlink socket created by glibc is closed.
  4. Thread B attempts to use the Netlink socket descriptor and receives the EBADF error.

The key to fixing such bugs is figuring out where exactly the double-close happens.

尝试重现,然后用strace跟踪系统调用:

 strace -o output.txt -T -tt -e trace=all -fp 1039

上面命令中的output.txt是输出的文件名,1039是进程的PID。

重现后打开output.txt,果然找到这样的错误:

这下实锤了,有个FD19重复close。

接下来的事,就是检查代码,解决重复close的地方了。 

相关文章:

getaddrinfo调用crash 的debug过程

前两天,产线报一例crash问题。拿到core文件后,栈展开信息: (gdb) bt #0 0x00007f64a3651aff in raise () from /lib64/libc.so.6 #1 0x00007f64a3624ea5 in abort () from /lib64/libc.so.6 #2 0x00007f64a3694097 in __libc_message () …...

【Sql】sql语句练习随记

本文通过最经典的“学生-成绩-课程-教师”表来帮助练习sql语句。 STUDENT表 SNO 学号SNAME 姓名SSEX 性别SBIRTHDAY 生日CLASS 班级 SCORE表 SNO 学号CNO 课程编号DEGREE 分数 COURSE表 CNO 课程编号CNAME 课程名称TNO 教师编号 TEACHER表 TNO 教师编号TNAME 教师姓名TS…...

IDEA社区版搭建Tomcat服务器并创建web项目

IDEA社区版搭建Tomcat服务器并创建web项目 目标 创建Web项目的目录结构可以启动Tomcat服务器编写Servlet并访问成功 问题 IDEA社区版没有创建Web工程的选项IDEA社区版没有Tomcat插件 实现步骤 针对以上两个问题,分步解决 问题一:IDEA社区版没有创建…...

C++ [STL-简介]

本文已收录至《C语言和高级数据结构》专栏! 作者:ARMCSKGT ​​​​​​​​ 文章目录 前言正文简介关于STL各种版本 STL组件容器迭代器配接器(适配器)算法仿函数空间配置器 STL的重要性学习STL的意义如何学习STL STL的缺陷 最后 前言 STL(standard tem…...

牛客前端编程语言错题2

【语法】 名为“ctx”的变量是某个HTML5画布对象的上下文。以下代码绘制的是什么() Ctx.arc(x,y,r,0,Math.PI,true); 在给定点绘制一个矩形 从一个点到另一个点绘制一条直线 在给定点绘制一个半圆 在给定点绘制一个圆 链接:https://www.now…...

【C语言】基础语法3:控制流程结构

上一篇:运算符和表达式 下一篇:函数和递归 ❤️‍🔥前情提要❤️‍🔥   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图(结束换链接)并免费提供给大家学习,希望大家…...

MySQL安全性:防止攻击和保护数据

MySQL安全性:防止攻击和保护数据 MySQL是当今最流行的关系型数据库之一,然而,随着Internet的普及,数据库安全问题也越来越受到关注。在这篇文章中,我们将重点介绍MySQL的安全性问题,以及如何防止攻击和保护…...

R语言结构方程模型(SEM)

详情点击链接:R语言结构方程模型(SEM)生态学领域应用 一,R语言SEM分析入门:lavaan VS piecewiseSEM 结构方程模型在生态学研究中的应用及模型结构方模型估计方法:局域估计和全局估计的基本工作原理、主要…...

软件or硬件?硬件的前途到底在哪里?

一、硬件明明比软件更难,国内的硬件技术也不如软件,为什么硬件工程师待遇还不如软件? 1、不需要太高层次的硬件设计,比如大部分小家电企业,简单的电子产品企业,单片机简单外围设计就够了,单片机…...

同学在外包干了两年的点点点,24岁人就快废了

前言 简单的说下,我大学的一个同学,毕业后我自己去了自研的公司,他去了外包,快两年了我薪资、技术各个方面都有了很大的提升,他在外包干的这两年人都要废了,技术没一点提升,学不到任何东西&…...

基于Java springboot 疫情在线网课管理系统

博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录 一、前言介绍1.1 背景及意义1.2 系统运行环境…...

Unity Camera -- (3)控制相机能看到的东西

使用剪裁平面(Clipping Planes)定义相机可视范围 Clipping Planes定义了相机所能看到的场景范围。在有些时候,限制相机所能看到的范围是出于风格上的考量,但编辑Clipping Planes的主要目的是为了优化性能。相机所需要渲染的东西越…...

《基于深度迁移学习的可穿戴睡眠阶段分类》阅读笔记

一、摘要 佩戴可穿戴设备进行睡眠监测是一种无创、便捷的方法,可以提高睡眠障碍筛查和健康监测的效率。然而,由于缺乏大规模、标准化的PPG数据集,使用PPG进行睡眠阶段分类仍然具有挑战性。本文提出了一种基于深度迁移学习的方法来解决这个问…...

java版工程管理系统源码企业工程项目管理系统简介

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…...

机器学习算法 决策树

文章目录 一、决策树的原理二、决策树的构建2.1 ID3算法构建决策树2.2 C4.5 算法树的构建2.3 CART 树的创建 三、决策树的优缺点 一、决策树的原理 决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总…...

论文笔记:An Interactive-Voting Based Map Matching Algorithm

2010 MDM 1 ST-matching的问题 论文笔记:Map-Matching for low-sampling-rate GPS trajectories(ST-matching)_UQI-LIUWJ的博客-CSDN博客 当轨迹很长,且车辆通过多线平行的道路时,ST-Matching的效果较差&#xff0c…...

_awt_container容器_演示

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。 方法签名方法功能setLocation(int x,int y)设置组件的位置setSize(int width,int heigth)设置组件的大小setBounds(int x,int y,int width,int heigth)设置组件的位置,大小。…...

TryHackMe-Misguided Ghosts(boot2root)

Misguided Ghosts 端口扫描 循例nmap FTP枚举 直接登anonymous,有几个文件,下下来 info.txt 我已经包含了您要求的所有网络信息,以及一些我最喜欢的笑话。- 帕拉摩尔该信息可能指的是pcapng文件 jokes.txt Taylor: Knock, knock. Josh: …...

【Leetcode】10. 正则表达式匹配

10. 正则表达式匹配(困难) 题解 如果从左向右进行匹配的话,需要考虑字符后是否有 * 。 因此选择从右向左扫描更为简单。 *前面肯定有一个字符,它像是一个拷贝器,能够复制前面的单个字符,甚至也可以把这个…...

不得不说的结构型模式-装饰器模式

目录 装饰器模式是什么 下面是装饰器模式的一个通用的类图: 以下是使用C实现装饰器模式的示例代码: 下面是面试中关于桥接器模式的常见的问题: 下面是问题的答案: 装饰器模式是什么 装饰器模式是一种结构型设计模式&#xff…...

别再只用BCE了!用PyTorch实现ASL损失函数,搞定多标签分类中的样本不均衡

多标签分类新范式:PyTorch实战ASL损失函数解决样本不均衡难题 在图像标注、医学诊断或文本情感分析等多标签分类任务中,我们常常遇到一个棘手问题——某些标签的出现频率可能比其他标签高出几个数量级。想象一下,当你构建一个商品标签系统时&…...

DistroAV技术解析:NDI网络视频传输的OBS插件解决方案

DistroAV技术解析:NDI网络视频传输的OBS插件解决方案 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 在当今的直播和内容创作领域,网络视频传输技…...

告别重复造轮子:用快马AI为qclaw项目封装高效算法模板与优化工具

在量子计算领域,qclaw项目的开发往往需要处理大量重复性工作。每次从零开始编写量子算法不仅耗时耗力,还容易引入人为错误。最近我在开发一个量子化学模拟项目时,发现了一个能显著提升效率的方法——利用InsCode(快马)平台构建可复用的算法模…...

2026届最火的六大AI辅助论文平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理技术的智能工具是AI写作软件,它能够辅助用户快速生成各类不同的…...

DeepSeek R1的蒸馏为啥只做SFT不加RL?聊聊论文里没明说的权衡与社区机会

DeepSeek R1的蒸馏技术:为何仅用SFT而舍弃RL?技术决策背后的深度思考 当DeepSeek R1论文中那个看似简单的技术选择——"仅采用监督微调(SFT)而放弃强化学习(RL)"——映入眼帘时,不少资深研究者都会下意识停顿思考。这个决策背后隐藏…...

技术解析 | 【ECCV2022】MuLUT:多级查找表协同优化在图像超分中的高效实践

1. MuLUT技术背景与核心价值 图像超分辨率(Super-Resolution)技术一直是计算机视觉领域的热门研究方向,简单来说就是让低分辨率图像变清晰的过程。传统基于卷积神经网络(CNN)的方法虽然效果不错,但计算量大…...

ReefwingLSM9DS1库:面向nRF52840的九轴IMU同步驱动

1. ReefwingLSM9DS1库概述:面向Arduino Nano 33 BLE的LSM9DS1九轴IMU驱动实现ReefwingLSM9DS1是一个专为Arduino Nano 33 BLE硬件平台优化的C类库,用于驱动STMicroelectronics出品的LSM9DS1高精度九轴惯性测量单元(Inertial Measurement Unit…...

LTSC-Add-MicrosoftStore:Windows 11 24H2 LTSC应用商店恢复工具实战指南

LTSC-Add-MicrosoftStore:Windows 11 24H2 LTSC应用商店恢复工具实战指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 1. 问题本质&…...

PX4-Autopilot固定翼无人机编队飞行:深度实战与高效部署指南

PX4-Autopilot固定翼无人机编队飞行:深度实战与高效部署指南 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控系统的领导者,为固定翼无人机编…...

Qwen3-TTS-12Hz-1.7B-CustomVoice实战教程:与LangChain集成实现多跳语音问答链

Qwen3-TTS-12Hz-1.7B-CustomVoice实战教程:与LangChain集成实现多跳语音问答链 1. 引言:当语音合成遇上智能问答 想象一下这个场景:你对着手机问了一个复杂的问题,比如“帮我查一下北京明天天气怎么样,然后推荐几个适…...