以keepalived为例说明程序不能正常被gdb调试的原因

news2024/11/28 11:56:05

现象

通过gdb att $keepalived_pid发起对当前运行keepalived的调试;

在放行keepalived继续执行后,想通过Ctrl+C按键中断执行,观察下被调试程序的当前内部状态,
但是,在终端输入Ctrl+C后,导致keepalived被调试进程退出。

gdb无法对keepalived进行正常的调试交互!

结论先行

  • gdbinferior process之间通过ptrace系统调用,以及对signal信号的拦截、传递进行调试交互过程
  • 由终端触发的signal会首先被Kernel路由到inferior process,然后再被gdb截获
  • Linux Kernel针对inferior process信号存在特别的路由机制,会导致某些应用使用了特别信号捕获机制,例如,sigwait or signalfd,并处理了SIGINT信号,则不能被gdb正常调试

缘由

以前就了解到,如果被调试程序使用到类似sigwait特殊的信号捕捉机制,将会导致gdb调试程序遇到麻烦,特别是无法正常使用Ctrl+C按键,中断暂停被调试程序,进行正常的交互操作。

最近遇到keepalived一些问题, 就想用调试的方法看看它的运行时逻辑,在这时就遭遇了现象一样的调试失败。

先搜索了下keepalived源码,并无sigwait的使用过程,因为以前看那篇介绍比较粗,不知道除了sigwait使用方式外,还有signalfd使用方式,也会导致GDB调试遭遇类似问题。
而且,当时觉得keepalived作为比较出名的开源软件,应该不会不支持被调试,所以,并没有在第一时间发现原因。

分析

采用了分掘挖进的方法:

  • 用不同的keepalived版本
  • 用不同的linux部署环境、不同的gdb版本

来分析、验证这个问题,结果发现表象却出奇的一致!

最后,懒得继续研究下去其中到底为什么了,就向keepalived社区提出了Keeppalived不能被正常调试的issue。

社区解决方案

keepalived社区称之为Linux Kernel signal bug,但Linux社区保持这样的信号处理特性,有其原因。

最终,keepalived社区用新增启动参数项--ignore-sigint来解决这个问题。

图解

调试模型
信号调试交互序列图

参考

  • Keeppalived不能被正常调试的issue
  • 社区新增–ignore-sigint option的commit
  • E文 Linux信号路由特殊机制导致GDB正常Ctrl+C却调试失败
  • E文 调试的信号传递过程
  • E文 GNU GDB 信号处理相关命令

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

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

相关文章

靠这10个神级搜书网站,实现你电子书自由(含有声书资源)!

2024搜书利器大盘点,让你轻松找到心仪的电子书,你想要的都有!竟然还有有声书!速度收藏,这一次,让你实现电子书自由! 阿星今天又来给你们送大礼了!这次不是别的,是搜书网…

亚马逊测评自养号误区解析

大家都知道亚马逊的评价对产品listing曝光和流量是有很大影响,但是亚马逊的评价又不是那么容易获取的,再加上亚马逊平台风控的不断严苛,所以卖家们想尽办法打造爆款listing是每个亚马逊卖家共同的目标,尤其是当旺季到来时&#xf…

SSM名城养老院管理系统-计算机毕业设计源码03948

目 录 摘要 1 绪论 1.1选题的意义 1.2研究现状 1.3Vue.js 主要功能 1.4ssm框架介绍 2 1.5论文结构与章节安排 3 2 名城养老院管理系统分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《03》

系列文章 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》 说明 在上篇 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》 开始移植适配 FreeRTOS,FreeRTOS 移植适配…

python-02

面向对象 Python中把具有相同属性和方法的对象归为一个类。 class ClassName: 语句 class Myclass: # 定义类Myclassdef pp(self): # 定义方法pp()print("这是产品说明书")myclass Myclass() # 实例化类Myclass myclass.pp() # 调用Myclass中的方法pp()打印…

深入浅出 Babel:现代 JavaScript 的编译器

在现代前端开发中,JavaScript 的版本更新速度非常快,新的语法和特性层出不穷。然而,旧版本的浏览器并不总是支持这些新特性。为了确保代码的兼容性和稳定性,我们需要一个工具来将现代 JavaScript 代码转换为旧版本的代码。Babel 就…

【Windchill监听器、队列、排程】

目录 Windchill监听器 监听器的概念 监听器的监听器实现原理 监听器的客制化 Windchill队列、排程 队列、排程的概念 Windchill常见出厂队列 自定义队列 Windchill 11新增功能 Windchill监听器 监听器的概念 监听器,字面上的理解就是监听观察某个事件&…

二进制中的相反数

相反数的本质 相反数的本质是两数相加等于 0,1 加上 1 的相反数-1 永远等于 0。 二进制中取相反数的公式 对于二进制运算来说减法是通过加上一个负数实现的,所以想要达成两数相加等于 0 的情况一定是通过溢出来实现。两数相加等于 0 可以带入为 1111…

部署LVS-DR群集...

目录 最后一台主机(第四台) 本地yum源安装httpd(非必做) 继续开始从最后一台主机开始(第四台) 转第二台主机 转第三台主机 回第二台 上传 转第三台主机 上传 回第二台 转第三台 转第一台主机…

一文看懂:数据湖、数据仓库、数据中台,浅显直白!

许多初入数据分析和数据可视化行业的人,对一些概念的认知往往很模糊,贝格前端工场截借此机会给大家讲解一下数据湖、数据仓库和数据中台的概念,力求浅显易懂。 一、什么是数据湖 数据湖是一种用于存储大量原始数据的存储系统,它…

拓扑排序、关键路径(AOV、AOE网)

拓扑排序(AOV网) 相关知识 在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity)。 在有向图中若以顶点表示活动&#xff…

零代码本地搭建AI大模型,详细教程!普通电脑也能流畅运行,中文回答速度快,回答质量高

这篇教程主要解决: 1). 有些读者朋友,电脑配置不高,比如电脑没有配置GPU显卡,还想在本地使用AI; 2). Llama3回答中文问题欠佳,想安装一个回答中文问题更强的AI大模型。 3). 想成为AI开发者,开…

家里满是“飞尘、毛絮”怎么办?用空气净化器,干净又卫生!

随着气温的升高,家中的毛絮和飞尘问题愈发严重,这些细小的颗粒常常聚集在房间的角落,即使每日清洁,似乎也难以彻底清除,反而可能使情况恶化。特别是对于养宠物的家庭来说,毛絮问题尤为突出,即使…

FullCalendar日历组件集成实战(15)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

LVGL:

LVGL(little video graphics library)是一个开源的嵌入式图形库,提供高性能、低资源占用的图形用户界面(GUI)。具有模块化(项目工程源码)设计,可以在多平台使用(如微处理…

《幻影大师:透视缠中说禅的虚像与真相》

而且他从不犯错,至少在他的叙述中是这样,所有的文章和言论都被粉饰得完美无瑕,即便有误,他也绝不公开承认,更别提什么真诚的道歉和改正了。那些对他推崇备至的人,多是盲目追随,将他神化为无所不…

Vue部分文件说明

1.eslintignore文件 Eslint会忽略的文件 # Eslint 会忽略的文件.DS_Store node_modules dist dist-ssr *.local .npmrc 2.gitignore # Git 会忽略的文件.DS_Store node_modules dist dist-ssr .eslintcache# Local env files *.local# Logs logs *.log npm-debug.log* yarn-de…

echarts写某个市地图

const geoJSON {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":440303,"name":"罗湖区","center":[114.123885,22.555341],"…

简单易用的多功能图床Picsur

什么是 Picsur ? Picsur 是一款易于使用、可自行托管的图片分享服务,类似于 Imgur,并内置转换功能。支持多种格式的图片,包括 QOI、JPG、PNG、WEBP(支持动画)、TIFF、BMP、GIF(支持动画&#xf…

AI Agent智能应用从0到1定制开发(完结)

在数字化时代的浪潮中,人工智能(AI)代理智能应用如同星辰般璀璨,引领着技术革新的潮流。从零开始定制开发一款AI Agent智能应用,就像是在无垠的宇宙中绘制一颗新星的轨迹,每一步都充满了挑战与创新的火花。…