Всем привет Возможно ли в vc6 указать директиву компиляции, что бы компилятор автоматически в каждую процедуру добавил обработчик исключений и при возникновении ощибки выводил имя процедуры? И как бороться с ошибками в больших проектах?
Android Собирайте в режиме debug - будет обработчик со ссылкой на исходник и т.д. Вообще, в VS очень хороший встроенный отладчик.
Нашел идентификатор __func__, с его помощью можно сравнительно легко (вручную) проставить обработчики исключений, но похоже что мой си(6) еще не поддерживает его, компилятор ругается '__func__' : undeclared identifier. Неужели в си не предусмотрели ничего подобного?
Android По идее, если в системе установлен Runtime/JIT-отладчик - он должен перехватывать эти исключения, и позволять отлаживать программу с места возникновения ошибки. А вообще ошибки в зарелизенных программах обычно локализуются по дампу стека и памяти...
alpet У меня по умолчанию стоит OllyDbg, когда возникает исключение очень трудно понять какая это процедура, особенно если ошибка всплывает в какой-то апи. Было бы удобно если бы сработал обработчик исключений и записал в файл имя процедуры, тип исключения и т.д., но не ставить же все обработчики вручную. Еще у меня часто встречается, что из процедуты несколько выходов(return) и на каждом из них надо снять обработчик, где-то пропустишь - нарушится стек. Можно это как-то автоматизировать?
Android Зачем в каждой процедуре свой обработчик? Пусть лучше один будет, а по стеку можно понять в какой процедуре произошло исключение.
>Зачем в каждой процедуре свой обработчик? Пусть лучше один будет Можно и так впринципе, он в дебаг версии не помешало бы и в каждую влепить
Android Не хочешь почитать те статьи? К тому же есть множество всяких библиотек для отладки. Да и самому можно написать несколько макросов для этого.
IceStudent Те статьи я обязательно прочту, как распечатаю, не читаю большие статьи с экрана Пока что пользуюсь макросами: #if F_SEH #define __mytry __try{ #else #define __mytry #endif #if F_SEH #define __myfinally(__ProcName) }__except(EXCEPTION_EXECUTE_HANDLER){OutputDebugString("!!! error in "#__ProcName);} #else #define __myfinally(__ProcName) #endif В книге написано что в стандарт C99 добавлена макроконстанта __func__(имя текущей процедуры), но 6 си ее не распознает. В 7 эта переменная поддерживается?
Android Я бы посоветовал посмотреть справку (Predefined Macros): __FILE__, __LINE__, __FUNCDNAME__, __FUNCSIG__, __FUNCTION__. А так - я бы поискал подходящую библиотеку для отладки - "всё уже придумано до нас".
10_Brasil Почитай тот цикл статей на рсдн, посмотри codeproject. Есть много всяких библиотек для логирования (протоколирования), отладки, контроля утечек памяти. Лично я пользуюсь log4cpp для логирования, а для остального - DevPartner.