Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
hknower
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
#1

Вывод отладочной информации - C++

01.06.2014, 18:30. Просмотров 1185. Ответов 6
Метки нет (Все метки)

Добрый день

Есть консольная программа которую пишу давольно давно и ее размер уже перевалил за несколько тыс строк. Она изобилует вставками кода с выводом отладочной инфы:

C++
1
2
3
#ifdef _DEBUG
//Тут что-то выводим на консоль с помощью printf()
#endif
Эта конструкция меня устраивала до тех пор пока не исчезла возможность просматривать вывод на консоль и я
решил что нужно делать логирование в файл.
Я бы набросал ее и отруки, а в асходниках автоматом бы заменил printf() на самописный Log(), но колво параметров
у printf() не постоянно, а функцию хотел бы оформить как макрос с переменным колвом параметров.

Мне кажется что пытаюсь изобрести велосипед.
Может есть стандартные решения?
Спасибо
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.06.2014, 18:48     Вывод отладочной информации #2
А зачем вообще использовать printf? вы же в разделе C++ тему создали, используйте std::ofstream, связанный с файлом и выводите сколько угодно параметров разных типов.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
01.06.2014, 18:57     Вывод отладочной информации #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от hknower Посмотреть сообщение
я решил, что нужно делать логирование в файл, но кол-во параметров у printf() не постоянно
Есть функция, аналогичная printf, но для вывода в файл: fprintf - оно ?
hknower
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
01.06.2014, 19:06  [ТС]     Вывод отладочной информации #4
точно оно)) только об этом подумал)) можно с пом fprintf как-нибудь выводить на и консоль и в файл?
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,608
Завершенные тесты: 1
01.06.2014, 19:13     Вывод отладочной информации #5
Цитата Сообщение от hknower Посмотреть сообщение
можно с пом fprintf как-нибудь выводить на и консоль
C++
1
fprintf(stdout,.....);
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
01.06.2014, 19:14     Вывод отладочной информации #6
Цитата Сообщение от hknower Посмотреть сообщение
можно с пом fprintf как-нибудь выводить на и консоль и в файл?
Возможно не лучшее решение, но можно использовать что-то вроде этого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
#define _DEBUG         // определяем _DEBUG
#define _DEBUG_CONSOLE // определяем _DEBUG_CONSOLE
#define _DEBUG_FILE    // определяем _DEBUG_CONSOLE
 
int main()
{
 
#ifdef _DEBUG // если определен _DEBUG, то заходим внутрь
    #ifdef _DEBUG_CONSOLE // если определен _DEBUG_CONSOLE, то заходим внутрь
        // и печатаем в консоль
    #endif
    #ifdef _DEBUG_FILE    // если определен _DEBUG_FILE, то заходим внутрь
        // и печатаем в файл
    #endif
#endif
    return 0;
}
Стоит учитывать, что некоторые среды разработки сами определяют _DEBUG, при конфигурации сборки Debug, то-есть строка
C++
1
#define _DEBUG         // определяем _DEBUG
скорее всего не понадобится. Определением или комментированием оставшихся двух макросов мы регулируем куда выводить или не выводить.

P.S. Вообще всех проблем можно избежать, если пользоваться встроенным отладчиком в среду разработки. Часто это оказывается намного лучше отладочной печати. Тут вам и отслеживание переменных в определенный момент времени, и состояние памяти, и состояние регисторов процессора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 19:46     Вывод отладочной информации
Еще ссылки по теме:

C++ Вывод информации об абонентах
C++ Вывод информации из файла
C++ Вывод информации из файла
C++ Ввод и вывод информации
C++ Ввод информации и вывод информации на экране

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
hknower
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
01.06.2014, 19:46  [ТС]     Вывод отладочной информации #7
Ну чтоб уж совсем было готовое решение:
Как определить эту конструкцию в макрос:
C++ (Qt)
1
2
3
4
5
6
7
8
#ifdef _DEBUG // если определен _DEBUG, то заходим внутрь
    #ifdef _DEBUG_CONSOLE // если определен _DEBUG_CONSOLE, то заходим внутрь
        // и печатаем в консоль
    #endif
    #ifdef _DEBUG_FILE    // если определен _DEBUG_FILE, то заходим внутрь
        // и печатаем в файл
    #endif
#endif
чтоб однажды настроив где-нибудь stdafx.h можно было бы вызывать с переменным колвом параметров, а не втыкать это добро каждый раз при выводе в файл/консоль?

Добавлено через 15 минут
Тут думаю можно обойтись без макроса с переменным кол-вом переменных, и ввести функцию с переменным кол-вом переменных:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Log(params)
{
 
#ifdef _DEBUG // если определен _DEBUG, то заходим внутрь
char tmp_str[MAX_STR_LEN];
sprintf(tmp_str , "%s..." ,params);
    #ifdef _DEBUG_CONSOLE // если определен _DEBUG_CONSOLE, то заходим внутрь
        // и печатаем в консоль
        fprintf(stdout , "%s" , tmp_str);
    #endif
    #ifdef _DEBUG_FILE    // если определен _DEBUG_FILE, то заходим внутрь
        // и печатаем в файл
        fprintf(file_fd , "%s" , tmp_str);
    #endif
#endif
 
}
Yandex
Объявления
01.06.2014, 19:46     Вывод отладочной информации
Ответ Создать тему
Опции темы

Текущее время: 19:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru