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

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

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

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

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

Добрый день

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

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

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

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

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

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

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

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

Ввод и вывод информации - C++
char x,y; cout<<"Ya rabotayou "; cin>>x; cout<<" Mne "; cin>>y; cout<<"let"<<endl; system("pause"); Почему я не...

Вывод информации о файле - C++
Добрый день форумчане. Кто подскажет,суть задачи - вывести информацию о файле. может быть есть какие-то функции которые в этом помогут?...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 18:48     Вывод отладочной информации #2
А зачем вообще использовать printf? вы же в разделе C++ тему создали, используйте std::ofstream, связанный с файлом и выводите сколько угодно параметров разных типов.
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
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
01.06.2014, 19:13     Вывод отладочной информации #5
Цитата Сообщение от hknower Посмотреть сообщение
можно с пом fprintf как-нибудь выводить на и консоль
C++
1
fprintf(stdout,.....);
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++
Здравствуйте. Проблема состоит в том, что информация из файла выводится некорректно. Помогите, пожалуйста, разобраться void LoadData()...


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

Или воспользуйтесь поиском по форуму:
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     Вывод отладочной информации
Ответ Создать тему
Опции темы

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