Собрать Qt в режиме "Release with Debug Info"? - PullRequest
22 голосов
/ 09 августа 2011

Есть ли способ собрать Qt в режиме "Release with Debug info"? Мое приложение аварийно завершает работу только в режиме «релиз» (работает нормально в режиме отладки) и, похоже, проблема связана с Qt (может быть ошибкой в ​​Qt). Поэтому я хочу увидеть информацию об отладке Qt.

Qt docs имеет режим «отладка», «выпуск», но не «выпуск с отладкой».

[Upate]

Мое приложение отлично работает с Migw 32bit Release / Debug и VSC ++ Compiler 64bit Debug.

Сбои только в VSC ++ 64-битной версии

Какие-нибудь советы?

Ответы [ 7 ]

28 голосов
/ 29 февраля 2016

Старый вопрос, я знаю.Но в настоящее время вы можете просто использовать

CONFIG += force_debug_info

, чтобы получить символы отладки даже в режиме выпуска.Когда вы используете QMake через командную строку, я обычно делаю это, чтобы получить сборку выпуска с отладочной информацией:

qmake CONFIG+=release CONFIG+=force_debug_info path/to/sources

, это включит условия ниже Qt5/mkspecs/features/ default_post.prf :

force_debug_info|debug: CONFIG += debug_info
force_debug_info {
    QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
    QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
    QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
}

, который даже работал бы для Qt 4.x, но нам нужно было бы вручную добавить вышеуказанные условия в default_post.prf для Qt 4.x

16 голосов
/ 09 августа 2011

Я использую это в моих файлах qmake для создания своих версий выпуска с помощью debuginfo:

QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

Таким образом, вы можете по крайней мере проверить, происходит ли сбой в вашем коде.Сборка Qt в этом режиме не поддерживается, см. Эту ошибку .Вы можете сделать это только вручную, изменив vcproj-файлы или Makefiles, как в ответе Macke.

11 голосов
/ 11 октября 2016

В Qt5 при вызове configure просто добавьте опцию -force-debug-info

3 голосов
/ 09 августа 2011

Обновление: см. Ответ @ milanw ниже.Теперь это поддерживается напрямую в qmake

Мы используем qmake для генерации файлов vcproj для сборки Qt.Я написал скрипт на python (но sed тоже подойдет) для изменения vcproj-файлов для сборки с отладочной информацией и в релизе.

Наличие отладочной информации действительно неоценимо для стековых трассировок, которые идут назад и вперед между Qt инаше приложение.

Вот соответствующий фрагмент:

for root, dirs, files in os.walk( qt_build_dir ):
    for f in files:
      if not f.endswith('.vcproj'):
          continue

      output = []
      with open(pj(root, f), 'r') as file:
          for line in file.readlines():
              line = line.strip()
              if 'DebugInformationFormat="0"' == line:
                  output.append('\t\t\t\tDebugInformationFormat="3"')
              elif 'GenerateDebugInformation="false"' == line:
                  output.append('\t\t\t\tGenerateDebugInformation="true"')
              else:
                  output.append(line)

      with open(pj(root, f), 'w') as file:
          file.write('\n'.join(output))
1 голос
/ 13 августа 2012

Сборка Qt в этом режиме не поддерживается, смотрите эту ошибку. Вы можете сделать это только вручную, изменив vcproj-файлы или Makefiles, как в ответе Macke.

Могу ли я добавить, что в Qt 4.8 эта ошибка, похоже, исправлена. Я скопировал эти две строки в мой файл .pro, и он работал как шарм.

1 голос
/ 09 августа 2011

Похоже, вам нужно настроить QMAKE_CFLAGS_RELEASE переменную. В случае gcc вам просто нужно добавить опцию -g для добавления отладочной информации.

0 голосов
/ 27 июля 2018

Просто выберите Построение профиля на вкладке проектов Qt Creator, а не отладочную или выпускную сборки. Это добавит много аргументов к вызову qmake.

qmake.exe someproject.pro -spec win32-msvc "CONFIG+=qml_debug" 
"CONFIG+=qtquickcompiler" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info"
...