Подтвердить что ты не робот

Обнаруживать, если qt запускает отладочную сборку во время выполнения

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

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

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

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

4b9b3361

Ответ 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'.