Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Добрый день

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

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

Мне кажется что пытаюсь изобрести велосипед.
Может есть стандартные решения?
Спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2014, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод отладочной информации (C++):

Проект не содержит отладочной информации - C++
..., хотите разрешить отладку и перестроить проект? И кнопочки ДА, Нет. Вот, что выдает мне Dev-C++ при попытке запустить отладку....

Ввод информации и вывод информации на экране - C++
Используйте две переменные типа float, предложите пользователю ввести два числа и выведите на экран четыре строчки (сумма, разность,...

Вывод информации в С++ - C++
Уважаемые коллеги, подскажите пожалуйста, как в С++ делать такой вывод как в Си. Например: k=M_PI; printf("%1.2d",k);

Графический вывод информации - C++
Мне надо написать программу, которая имитирует изменение температуры. Я не хочу изменять температуру просто "переменная++" , мне...

Вывод информации из файла - C++
В файле записи в виде : 1 Кружка_большая_синяя 100 6 0 2 Кружка_большая_синяя 100 6 0 3 Кружка_маленькая_зеленая 765 4 0 нужно...

вывод на экран информации - C++
мне нужно сдать программу помогите плз 1) занести данные в файл 2) вывод на экран информации 3)удалять не нужные записи ...

6
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 18:48 #2
А зачем вообще использовать printf? вы же в разделе C++ тему создали, используйте std::ofstream, связанный с файлом и выводите сколько угодно параметров разных типов.
0
TrueBit
96 / 96 / 12
Регистрация: 19.11.2012
Сообщений: 195
01.06.2014, 18:57 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от hknower Посмотреть сообщение
я решил, что нужно делать логирование в файл, но кол-во параметров у printf() не постоянно
Есть функция, аналогичная printf, но для вывода в файл: fprintf - оно ?
1
hknower
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
01.06.2014, 19:06  [ТС] #4
точно оно)) только об этом подумал)) можно с пом fprintf как-нибудь выводить на и консоль и в файл?
0
zss
Модератор
Эксперт С++
6575 / 6137 / 2021
Регистрация: 18.12.2011
Сообщений: 15,993
Завершенные тесты: 1
01.06.2014, 19:13 #5
Цитата Сообщение от hknower Посмотреть сообщение
можно с пом fprintf как-нибудь выводить на и консоль
C++
1
fprintf(stdout,.....);
1
TrueBit
96 / 96 / 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. Вообще всех проблем можно избежать, если пользоваться встроенным отладчиком в среду разработки. Часто это оказывается намного лучше отладочной печати. Тут вам и отслеживание переменных в определенный момент времени, и состояние памяти, и состояние регисторов процессора.
1
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
 
}
0
01.06.2014, 19:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 19:46
Привет! Вот еще темы с ответами:

Построчный вывод информации - C++
Добрый день. Помогите реализовать построчную запись в файл. К примеру в консоль я ввожу значения: Hello World. My New Soft. А в файл...

ввод-вывод информации на с++ - C++
задание на картинке

Вывод информации в 1 строке - C++
Тут я в парочке консольных программ видел что, Там вывод идет на одной строке т.е cout &lt;&lt; sub; и мне нужно что бы значение вывода...

класс. вывод информации - C++
Проблема: не вывдит данные на экран, что у меня не так? class bank { private: char bank_name; char name; int...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.