Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > debugger для препроцессора. где раздобыть?


Автор: boostcoder 6.7.2011, 18:12
всем привет.

часто использую препроцессор для кодогенерации. иногда объем препроцессорного кода достигает 2000 строк.
если где-то закрадывается ошибка, отыскать ее это целый квест smile 

посему вопрос: существует ли препроцессорный дебагер?

спасибо.

Добавлено через 3 минуты и 22 секунды
есть http://www.boost.org/doc/libs/1_46_1/libs/wave/index.html. так же есть мысль, что с помощью этой либы можно реализовать дебаггер. но что-то лень..
может все же есть что-то готовое?

Автор: afiskon 7.7.2011, 09:23
Препроцессор - в смысле обычные макросы или какую-то свою наработку? Уверены, что тут не имеет место преждевременная оптимизация или что-то в этом роде?

Автор: boostcoder 7.7.2011, 09:26
Цитата(afiskon @  7.7.2011,  09:23 Найти цитируемый пост)
в смысле обычные макросы или какую-то свою наработку?

не уверен что понял...
вы видели макросы, объемом в тысячи строк? так вот для таких макросов и нужен дебаггер. ибо это уже не просто текстозамена, а настоящая программа на языке препроцессора.

Автор: Earnest 8.7.2011, 14:26
boostcoder, 
Какие ошибки ты имеешь в виду? Компиляции или уже выполнения? Честно сказать, с ошибками выполнения из за макросов давно не сталкивалась, т.к. привыкла все в скобки заключать. А вот когда не компилируется, просто прошу сгенерировать препроцессированный файл (с исходными строками в виде комментариев); ковыряться в нем - счастье небольшое, ибо туда все инклуды впихнуты; но иногда просто нет другого выхода, да и поиск помогает. В MS есть подобная опция, да и у других компиляторов должна быть.

Автор: boostcoder 8.7.2011, 17:32
Цитата(Earnest @  8.7.2011,  14:26 Найти цитируемый пост)
Какие ошибки ты имеешь в виду? Компиляции

да, компиляции.

Цитата(Earnest @  8.7.2011,  14:26 Найти цитируемый пост)
просто прошу сгенерировать препроцессированный файл

так и делаю.
но там же черт ногу сломит..
мало того что нужно понять что не правильно генерится... нужно понять еще и почему, и как исправить... smile 
дебаггер был бы в самый раз.

Автор: triclosan 8.7.2011, 17:35
имхо писать свой парсер надо

Автор: Earnest 9.7.2011, 14:38
Цитата(boostcoder @  8.7.2011,  18:32 Найти цитируемый пост)
дебаггер был бы в самый раз. 

Какой же тогда дебагер, разве что компилятор дебажить, чего он сволочь не компилит...
Цитата(boostcoder @  8.7.2011,  18:32 Найти цитируемый пост)
мало того что нужно понять что не правильно генерится... нужно понять еще и почему, и как исправить... 

Ну... процесс поиска ошибок вообще штука недетерминированная и происходит где-то в районе позвоночника... 
Похоже, что ты слишком макросами увлекся, а ведь известно, что штука это ненадежная. Лучше уж шаблоны. Они, кстати, могут почти все, что и макросы. Только макросы выразительнее в коде, поэтому я их применяю в конце кодогенерации, а там уже ошибиться не так страшно.


Автор: boostcoder 9.7.2011, 14:44
Цитата(Earnest @  9.7.2011,  14:38 Найти цитируемый пост)
Какой же тогда дебагер, разве что компилятор дебажить

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

Цитата(Earnest @  9.7.2011,  14:38 Найти цитируемый пост)
Лучше уж шаблоны

да. но в данном случае шаблонами тут не обойтись. как в этом примере: http://forum.vingrad.ru/index.php?showtopic=310053&view=findpost&p=2224452

Автор: Earnest 9.7.2011, 15:01
Цитата(boostcoder @  9.7.2011,  15:44 Найти цитируемый пост)
ну нет.

Ну, я и имела в виду, отлаживать не саму компиляцию, а препроцессинг. 
Цитата(boostcoder @  9.7.2011,  15:44 Найти цитируемый пост)
но в данном случае шаблонами тут не обойтись. 

Пример читать сил нет, слишком много букв  smile . Но думаю, что какой-то компромисс найти можно (сместив акцент в сторону макросов). Просто если слишком много макросов, то что-то не так с дизайном. Иногда действительно разумнее парсер написать... Или плюнуть на необходимость копипастить с небольшими изменениями.  Я тебе уже как-то говорила: ты слишком увлекаешься метапрограммированием и кодогенерацией... Такие штуки очень увлекательно писать, но когда приходит необходимость вернуться к ним, особенно через несколько лет, и подкрутить, начинаешь все проклинать. Я в своем приложении много чего переписала, выкинув нафик шаблоны-макросы (изыски прежних лет, инспирированные восхищением от знакомства с бустом), и сделав махонький копипаст... Во всем мера нужна, конечно... Короче, дизайн должен быть простым. И желательно, не ошибкоемким...

Автор: boostcoder 9.7.2011, 15:19
Цитата(Earnest @  9.7.2011,  15:01 Найти цитируемый пост)
Но думаю, что какой-то компромисс найти можно

ага. перейти на ЯП с динамической типизацией.
но тут возникнет другая, более сложно уловимая ситуация: ошибки при работе с типами, придется вылавливать в run-time smile

в общем Вашу позиция понял.
спасибо.

Добавлено через 7 минут и 2 секунды
Цитата(boostcoder @  9.7.2011,  15:19 Найти цитируемый пост)
ага. перейти на ЯП с динамической типизацией.
но тут возникнет другая, более сложно уловимая ситуация: ошибки при работе с типами, придется вылавливать в run-time

но это на самом деле второстепенная проблема.
а первостепенная в том, что хорошо я не знаю ни одного ЯП с динамической типизацией smile

Автор: baldina 9.7.2011, 18:47
Цитата(boostcoder @  9.7.2011,  15:19 Найти цитируемый пост)
перейти на ЯП с динамической типизацией.

какая связь между макросами и динамической типизцией?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)