gpt4 book ai didi

c++ - 如何比任何其他全局或静态变量更早地创建/构造类实例?

转载 作者:IT王子 更新时间:2023-10-29 00:31:26 25 4
gpt4 key购买 nike

如何早于main()创建特定类的实例,早于任何其他实例(包括静态和全局变量,包括在静态和动态库中(包括第三方提供的库))?


我正在处理一个包含多个类的项目,这些类在构建过程中可能会导致错误,例如访问 NULL 指针。任何此类错误都会导致向应用程序发送信号。我有一个信号处理程序可以捕获信号,显示有问题的线程的堆栈跟踪,并调用导致生成核心转储等的默认信号处理程序。
然而,一些这样的导致错误的实例被创建为类的全局变量和静态变量。 IE。它们被构建并在输入 main() 之前引起信号。

为了捕获此类信号,我需要比在 main() 中更早地注册我的信号处理程序,即我需要创建一个实例(它将注册信号处理程序)也作为全局或类静态变量,并且我需要保证此类实例的创建/构造早于任何其他实例。

如何完成?


要注册信号处理程序,我使用 sigaction() .
为了显示堆栈跟踪,我使用 backtrace() , backtrace_symbols() , abi::__cxa_demangle() .

最佳答案

标准 C++ 不提供在翻译单元之间对初始值设定项进行排序的方法,但 gcc 提供。来自 https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html 的示例:

Some_Class A __attribute__((init_priority (2000)));

最低值(最高优先级)是 101。

关于c++ - 如何比任何其他全局或静态变量更早地创建/构造类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com