在啥情况下会在控制权到达 main() 函数之前发生崩溃? [复制]
Posted
技术标签:
【中文标题】在啥情况下会在控制权到达 main() 函数之前发生崩溃? [复制]【英文标题】:In what scenarios crash happens before control comes to main() function? [duplicate]在什么情况下会在控制权到达 main() 函数之前发生崩溃? [复制] 【发布时间】:2011-04-09 04:57:12 【问题描述】:可能重复:Is there any way a C/C++ program can crash before main()?
您好,在什么情况下,应用程序在控制到达 main() 函数之前崩溃? 到目前为止我的理解:全局和全局静态初始化发生在 main() 之前。因此,如果初始化顺序不正确,那么在使用未初始化的指针等时可能会导致崩溃。
可能的解决方案:使用函数获取静态指针值,以便它们可以初始化并返回正确的指针。
我在 Program crashes in debugger before anything happens
我正在寻找更多信息。 这种崩溃还有其他情况吗? 以及避免此类崩溃的解决方案是什么?
【问题讨论】:
解决方案:不要使用全局变量。 【参考方案1】:全局对象和静态类数据成员在调用main()
之前调用它们的构造函数。如果这些构造函数崩溃,程序会在调用main()
之前崩溃。这是避免使用全局变量的众多充分理由之一。
如果您遇到许多全局变量,您可以通过在其构造函数中放置断点或调试输出来调试它们。依赖问题可以通过将全局变量转换为函数局部静态变量来解决,在第一次使用时构建。
【讨论】:
【参考方案2】:您已经给出了自己的大部分要求。 但这里有一些额外的信息:
在 Visual c++ 中,您可以通过以下方式控制初始化顺序:
#pragma init_seg(...)
在 gcc 中是这样的:
__attribute__ ((init_priority (2000)))
您现在可以阅读有关详细信息的相应文档。
【讨论】:
【参考方案3】:如果使用过大的全局成员,耗尽可用内存,程序会在 main 之前崩溃或被操作系统杀死。
如果您的程序与具有初始化代码的动态库链接,则该代码可以在 main 之前运行,具体取决于您的操作系统。该代码可能会崩溃。
许多其他脑死亡案例,当它故意崩溃时。
【讨论】:
以上是关于在啥情况下会在控制权到达 main() 函数之前发生崩溃? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
AppDomain.DoCallback()在啥情况下会失败?