类构造函数从未在发布模式下执行
Posted
技术标签:
【中文标题】类构造函数从未在发布模式下执行【英文标题】:Class Constructor never executed in release mode 【发布时间】:2008-10-29 22:55:01 【问题描述】:正是标题所说的。我正在使用 MSVC++ 2008 express,并且在发布模式下编译时,我的类构造函数永远不会执行。它确实在调试模式下工作。
我正在做类似的事情:
ClassTest test;
test.DoIt();
DoIt();
上的断点会触发,但ClassTest::ClassTest();
上的断点不会。
【问题讨论】:
【参考方案1】:只是一个想法 - 可能是发布模式下的编译器优化防止断点被击中。如果构造函数没有做任何事情(即它是无操作的),则可能会发生这种情况。尝试在构造函数中添加一些简单的语句,例如
-
声明一个局部变量
初始化变量
以某种方式使用它(例如打印出来)
然后在上面的第(3)步添加一个断点,看看是否命中了这个断点。
由于进行了优化,您可以看到在发布模式下命中断点的方式存在各种奇怪的调试问题。
【讨论】:
这是正确的,但是如果你声明并初始化一个int,然后不使用它,它仍然可能被优化掉,导致断点不触发。您想包含一个具有外部副作用的语句,以便编译器无法优化它。 原来我是个笨蛋,构造函数正在执行。我不小心将 wsa.wVersion 作为第一个参数提供给 WSAStartup,而不是使用 MAKEWORD,由于某种原因,它似乎在调试模式下工作。 谢谢马特 - 这是一个很好的观点。初始化变量是首先想到的只是为了测试理论,但实际使用变量也非常重要。我会更新答案。以上是关于类构造函数从未在发布模式下执行的主要内容,如果未能解决你的问题,请参考以下文章