Обнаруживать, если qt запускает отладочную сборку во время выполнения
Как я могу обнаружить из QObject во время выполнения, является ли Qt, с которым он связан, сборка отладки или релиз?
Я знаю о макросе QT_NO_DEBUG, но это разрешено во время сборки для Qt.
Пример 1, когда это было бы полезно: у меня есть плагин, который действует как обработчик сбоя, обеспечивая обратную трассировку. Я хочу, чтобы этот плагин попытался выполнить всю эту работу, если доступны отладочные символы qt.
Пример 2: У меня есть парсер аргументов командной строки, написанный в pyqt. Он хочет распечатать справку по программе. Как узнать, поддерживает ли QApplication -sync-переключатель или нет внутри pyqt. Если у меня была информация о типе сборки, я мог бы легко или просто удалить или удалить -sync из списка аргументов, которые программа понимает.
Ответы
Ответ 1
Если вы просто хотите проверить, используете ли вы отладочную или QT_DEBUG
сборку своего приложения, используйте QT_DEBUG
:
#ifdef QT_DEBUG
qDebug() << "Running a debug build";
#else
qDebug() << "Running a release build";
#endif
Хотя здесь явно используется препроцессор, а не проверка во время выполнения. Меня немного смущает вопрос, почему вы указали, что хотите выполнить эту проверку во время выполнения, поскольку решение о сборке с возможностью отладки или без нее может быть принято только до компиляции...
Мне не известен какой-либо простой способ проверить, была ли библиотека Qt, с которой вы ссылаетесь, создана с включенной отладкой (хотя я заметил, что это меняется в Qt5 с добавлением QLibraryInfo::isDebugBuild()
).
Ответ 2
Оба намека в принятом ответе верны. Есть один побочный эффект с Qt5 на macOS. По умолчанию фреймворки используют версию выпуска своей библиотеки, и результатом этого метода всегда будет значение 'false'.