Конструктор класса никогда не выполнялся в режиме выпуска

Именно то, что говорит название. Я использую MSVC++ 2008 Express, и мой конструктор класса никогда не выполняется при компиляции в режиме выпуска. Он работает в режиме отладки.

Я делаю что-то вроде:

ClassTest test;
test.DoIt();

Точки останова на DoIt(); срабатывают, а точки останова на ClassTest::ClassTest(); — нет.


person Community    schedule 29.10.2008    source источник


Ответы (1)


Просто мысль - это может быть оптимизация компилятора в режиме выпуска, которая предотвращает попадание в точку останова. Это может произойти, если конструктор ничего не делает (т. е. не работает). Попробуйте добавить в конструктор несколько простых операторов, например.

  1. Объявить локальную переменную
  2. Инициализировать переменную
  3. Используйте его каким-либо образом (например, распечатайте)

Затем добавьте точку останова на шаге (3) выше и посмотрите, сработала ли эта точка останова.

Вы можете увидеть всевозможные странные проблемы отладки с тем, как точки останова нажимаются в режиме выпуска, из-за сделанных оптимизаций.

person LeopardSkinPillBoxHat    schedule 29.10.2008
comment
Это правильно, но если вы объявите и инициализируете int, а затем не используете его, он все равно может быть оптимизирован и привести к тому, что точка останова не сработает. Вы хотите включить выражение, имеющее внешние побочные эффекты, чтобы компилятор не смог его оптимизировать. - person Matt Green; 30.10.2008
comment
Оказывается, я тупой, конструктор БЫЛ выполнен. Я случайно указал wsa.wVersion в качестве первого параметра WSAStartup вместо использования MAKEWORD, который по какой-то причине работает в режиме отладки. - person ; 30.10.2008
comment
Спасибо Мэтт - это хороший момент. Инициализация переменной была первым, что пришло в голову просто для проверки теории, но фактическое использование переменной также было бы очень важно. Я обновлю ответ. - person LeopardSkinPillBoxHat; 30.10.2008