Определить, выполняется ли Qt отладочная сборка во время выполнения

Как я могу определить из QObject во время выполнения, является ли Qt, с которым он связан, отладочной сборкой или сборкой выпуска?

Я знаю, о QT_NO_DEBUG макрос, но это разрешено во время сборки для Qt.

Пример 1, когда это было бы полезно: у меня есть плагин, который действует как обработчик сбоев, предоставляя backtrace. Я только хочу, чтобы этот плагин пытался выполнить всю эту работу, если доступны символы отладки qt.

пример 2: у меня есть парсер аргументов командной строки, написанный в pyqt. Он хочет распечатать справку программы. Как узнать, будет ли QApplication поддерживать переключатель-sync или нет из pyqt. Если бы у меня была информация о типе сборки, я мог бы легко добавить или удалить-sync из списка аргументов, которые понимает программа.

2 ответов


Если вы просто хотите проверить, выполняется ли Debug или release сборка приложения используйте QT_DEBUG:

#ifdef QT_DEBUG
  qDebug() << "Running a debug build";
#else
  qDebug() << "Running a release build";
#endif

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

Я не знаю никакого простого способа в Qt4 проверить была ли библиотека Qt, с которой вы связываетесь, построена с включенной отладкой (хотя я заметил, что это выглядит изменяющимся в Qt5 с добавлением QLibraryInfo::isDebugBuild()).


обе подсказки в принятом ответе верны. Существует один побочный эффект с Qt5 на macOS. По умолчанию фреймворки используют версию своей библиотеки, и результатом этого метода всегда будет значение "false".