C++ 17 | Вывод отладки

Что я хочу сделать, это когда я запускаю программу в режиме отладки, я хочу, чтобы она показывала в консоли или даже, возможно, в окне игры, что она делает, например, GameWindow::Initialized(args...), и я хочу, чтобы это выполнялось во всей программе. пока не закончится. Кроме того, если я получу функции для этого (я полагаю, что некоторые из них есть в Google), вместо проверки, находится ли он в режиме отладки: 'if (_Debug) {}', каждый раз, когда я хочу вызвать функцию, которая cout's для экран, есть ли способ, как я могу просто выполнить отладочную проверку один раз, и она будет выполнена?

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

Спасибо за чтение, если бы вы могли мне помочь или даже согласились с тем, что мой метод сработает, я буду очень признателен :)

Похоже, для чего нужна точка трассировки.

chris 20.08.2018 10:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Обычно вы используете #define NDEBUG, если не находитесь в режиме отладки. Так что вы можете

#ifndef NDEBUG
    cout << "test\n";
#endif

Я лично использую <code> #ifdef _DEBUG bool Debug = 1 #endif </code> - я никогда не задавал вопросов по SOF, поэтому не знаю, как использовать подсветку синтаксиса.

Vitex 20.08.2018 10:04

Итак, если у вас уже есть рабочее решение, в чем вопрос?

Werner Henze 20.08.2018 11:11

Ну, как я уже сказал, скажем, если бы я должен был печатать много вещей в отдельных функциях, если он работает в режиме отладки, вместо использования оператора if или #ifdef, я мог бы использовать функцию, чтобы cout все, что происходит, например Game :: Initialize (), Game :: Quit () и т. д. Мне интересно, сработает ли это, но мне нужно провести некоторое исследование, чтобы понять, что происходит.

Vitex 20.08.2018 11:21

Вы можете написать центральную функцию регистрации и позволить этой функции решать, регистрировать или нет (с #ifdef). В зависимости от того, что вы хотите регистрировать, это может быть немного сложно (разные аргументы, но вам, безусловно, нужна безопасность типов). Или вы можете использовать макрос, скрывающий логику #ifdef. Разные подходы с разными преимуществами и оговорками.

Werner Henze 20.08.2018 18:12
Ответ принят как подходящий

Хорошо, поэтому я просто решил сделать что-то действительно простое, поэтому все, что я сделал, это определил функцию журнала, которая принимает параметр, а затем выводит его на консоль, если режим отладки включен, в противном случае все, что я сделал, это сделал #else, а затем проделайте то же самое, но я не выводил его. Так что просто #define LOG (x) / * Ничего другого * / -> Это для выпуска

Другие вопросы по теме