OpenBMC的c++代码中的变量初始化问题(二)

2024-02-24 18:36

本文主要是介绍OpenBMC的c++代码中的变量初始化问题(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 开发平台

Win11、VS2022、Fedora39。

2 作业目的

通过VS2022跨平台Linux构建openbmc/intel-ipmi-oem的x64可执行模块。

3 问题描述

该模块启动后,出现以下异常:

上图中的调用堆栈消息是:

       std::__uniq_ptr_impl<sd_bus, sdbusplus::bus::details::BusDeleter>::_M_ptr(const std::__uniq_ptr_impl<sd_bus, sdbusplus::bus::details::BusDeleter> * const this) Line 199      C++

      std::unique_ptr<sd_bus, sdbusplus::bus::details::BusDeleter>::get(const std::unique_ptr<sd_bus, sdbusplus::bus::details::BusDeleter> * const this) Line 470      C++

      sdbusplus::bus::bus::get(sdbusplus::bus::bus * const this) Line 501 C++

      sdbusplus::bus::details::bus_friend::get_busp(sdbusplus::bus::bus & b) Line 616   C++

      libsdbusplus.so.1!sdbusplus::bus::match::match::match(sdbusplus::bus::bus&, char const*, std::function<void (sdbusplus::message::message&)>)(sdbusplus::bus::match::match * const this, sdbusplus::bus_t & bus, const char * _match, sdbusplus::bus::match::match::callback_t callback) Line 40 C++

      __static_initialization_and_destruction_0() Line 102   C++

      _GLOBAL__sub_I__ZN4ipmi10sensorTreeB5cxx11E() Line 1893       C++

      libc.so.6!__libc_start_main_impl  

      _start     

根据上述消息,异常发生在main函数执行之前的全局变量初始化,其中出现了变量名sensorTree。

sensorTree的定义在sensorcommands.cpp中:

SensorSubTree sensorTree;

类型名SensorSubTree的定义在sdrutils.hpp中:

using SensorSubTree = boost::container::flat_map<std::string,boost::container::flat_map<std::string, std::vector<std::string>>,CmpStrVersion>;

4 解决方法

调用堆栈消息中出现了大量的match,但是看不出SensorSubTree与match有何关联。

在sensorTree的定义下面有三个函数的定义中出现了match:

static sdbusplus::bus::match_t sensorAdded(

static sdbusplus::bus::match_t sensorRemoved(

static sdbusplus::bus::match_t thresholdChanged(

经搜索发现这三个函数都没有被调用,于是把它们注掉。

重新编译后运行时没有出现上述异常。

以上解决方法实属侥幸,请有识之士赐教。

这篇关于OpenBMC的c++代码中的变量初始化问题(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742991

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束