【问题标题】:Class Constructor never executed in release mode类构造函数从未在发布模式下执行
【发布时间】:2008-10-29 22:55:01
【问题描述】:

正是标题所说的。我正在使用 MSVC++ 2008 express,并且在发布模式下编译时,我的类构造函数永远不会执行。它确实在调试模式下工作。

我正在做类似的事情:

ClassTest test;
test.DoIt();

DoIt(); 上的断点会触发,但ClassTest::ClassTest(); 上的断点不会。

【问题讨论】:

    标签: visual-studio-2008 visual-c++ class constructor release


    【解决方案1】:

    只是一个想法 - 可能是发布模式下的编译器优化防止断点被击中。如果构造函数没有做任何事情(即它是无操作的),则可能会发生这种情况。尝试在构造函数中添加一些简单的语句,例如

    1. 声明一个局部变量
    2. 初始化变量
    3. 以某种方式使用它(例如打印出来)

    然后在上面的第(3)步添加一个断点,看看是否命中了这个断点。

    由于进行了优化,您可以看到在发布模式下命中断点的方式存在各种奇怪的调试问题。

    【讨论】:

    • 这是正确的,但是如果你声明并初始化一个int,然后不使用它,它仍然可能被优化掉,导致断点不触发。您想包含一个具有外部副作用的语句,以便编译器无法优化它。
    • 原来我是个笨蛋,构造函数正在执行。我不小心将 wsa.wVersion 作为第一个参数提供给 WSAStartup,而不是使用 MAKEWORD,由于某种原因,它似乎在调试模式下工作。
    • 谢谢马特 - 这是一个很好的观点。初始化变量是首先想到的只是为了测试理论,但实际使用变量也非常重要。我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多