0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
1

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

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

Добрый день

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

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

Мне кажется что пытаюсь изобрести велосипед.
Может есть стандартные решения?
Спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 18:30
Ответы с готовыми решениями:

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

В отладочной информации для данного модуля отсутствуют сведения об исходном коде
Выполнял пошаговую отладку программы в WinForms. На одной из строк выдает следующую ошибку. "В...

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

Вывод отладочной информации в проекте Windows Form
Довольно часто нужно смотреть промежуточные результаты расчетов матриц (вывести определенные строки...

6
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.06.2014, 18:48 2
А зачем вообще использовать printf? вы же в разделе C++ тему создали, используйте std::ofstream, связанный с файлом и выводите сколько угодно параметров разных типов.
0
99 / 99 / 47
Регистрация: 19.11.2012
Сообщений: 195
01.06.2014, 18:57 3
Лучший ответ Сообщение было отмечено hknower как решение

Решение

Цитата Сообщение от hknower Посмотреть сообщение
я решил, что нужно делать логирование в файл, но кол-во параметров у printf() не постоянно
Есть функция, аналогичная printf, но для вывода в файл: fprintf - оно ?
1
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
01.06.2014, 19:06  [ТС] 4
точно оно)) только об этом подумал)) можно с пом fprintf как-нибудь выводить на и консоль и в файл?
0
Модератор
Эксперт С++
12079 / 9758 / 5902
Регистрация: 18.12.2011
Сообщений: 26,195
01.06.2014, 19:13 5
Цитата Сообщение от hknower Посмотреть сообщение
можно с пом fprintf как-нибудь выводить на и консоль
C++
1
fprintf(stdout,.....);
1
99 / 99 / 47
Регистрация: 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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 19:46
Помогаю со студенческими работами здесь

Удаление отладочной информации
Как удалить отладочную информацию в Code Blocks?

Удаление из проекта отладочной информации
Программируя на VB-6 я периодически архивировал папки с проектами чтобы отследить историю изменений...

Включение отладочной информации через #define
Если такая тема гдето есть, скинте мне ссылку плз. Что я бы хотел #define _DEBUGLOGON...

Вывод информации в texBox2 и texBox3 на основании информации texBox1
Ребята, начанающему чайнику требуется помощь в написании проги. Прога пишется под тач скрин...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru