WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Поиск ошибок в Release версии

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Поиск ошибок в Release версии
Kir1 опубликован 27-12-2001 14:05 MSK   Click Here to See the Profile for Kir1   Click Here to Email Kir1  
Как осуществлять поиск ошибок в программе написанной на Visual C++ с MFC? Как я себе это представляю, то необходимо отлавливать все исключения сгенерированные программой и распечатываеть в файл содержимое стека... Чтобы по этой распечатке найти потом место в котором собственно и произошел вылет...Есть ли в MFC механизмы для этого? Функция AfxDumpStack() замечательно работает, но только в отладочной версии, а почему не работает в релизе? Подскажите, плз...
Kir1 опубликован 27-12-2001 17:25 MSK     Click Here to See the Profile for Kir1  Click Here to Email Kir1     
Неужели никто не сталкивался с такой проблемой? Или я плохо сформулировал свой вопрос?
VuDZ опубликован 27-12-2001 18:19 MSK     Click Here to See the Profile for VuDZ    
Может RSDN тебе поможет?
тама кое чта есть по этому вопросу
ADK опубликован 28-12-2001 08:07 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
По-моему, лучше всего протестировать нормально в DEBUG с BoundsChecker. А содержимое стека тебе и так пришлют, когда грохнется :-)).
the_moon опубликован 28-12-2001 10:23 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
В релизном варианте, при компиляции и линковке не включается отладочная информация, ну там привязка к исходникам, имена функций, номера строк итп., потому AfxDumpStack не имеет достаточно инфы для работы.

Тупой вариант зделать свой стэк, правда тебе придется каждое тело функции заворачивать в try - catch и забыть про return, вообщем гигантская работа, нужна только в больших проэектах, нормально осущевствима только на Си++, и должна быть продумана с самого начала.

Другой, нереальный вариант, не делать ошибок :)

Или если доверяешь клиентам пошли отладочную версию. И все дела.

успехов

tonik опубликован 10-01-2001 05:45 MSK     Click Here to See the Profile for tonik  Click Here to Email tonik     
Так а зачем искать ошибки в Release-версии? Разве отладочная версия не для этого существует?
eyes опубликован 10-01-2001 09:11 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
2tonik:
простой пример -
int i;
в отладочной версии инициализируется нулем, а в релизе - не инициализируется вообще (будет содержать случайное значение). И таких различий очень много.
vitya опубликован 10-01-2001 11:58 MSK     Click Here to See the Profile for vitya  Click Here to Email vitya     
У меня например дебуг версия нормально пахала, а в релизе был редкий exception на уровне системы, я его так и не сумел отловить, вопрос там был в multithreading-е
когда запускался второй thread прога давала
exception и все.
tonik опубликован 14-01-2001 04:42 MSK     Click Here to See the Profile for tonik  Click Here to Email tonik     
2eyes
Так лучше самому инициализировать переменную. И разве компилер не выдаст предупреждения при использовании переменной до инициализации?
Kasya опубликован 14-01-2001 05:48 MSK     Click Here to See the Profile for Kasya  Click Here to Email Kasya     
2tonik: Все мы люди, иногда можно чего-нибудь несущественного не заметить, а компилятор невсегда выдает предупреждения когда надо, а иногда делает это когда не надо.
У меня тоже были случаи когда дебаг работал нормально а релиз вызывал милое сообщение - "программа выполнила недопустимую операцию"
eyes опубликован 15-01-2001 15:33 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
В Яве компилер это делает (предупреждает).

Пример:

int i;

if (some)
{
i = 123;
}

int d = i - 321; // если some == FALSE, имеем грабли.


Для этого в компилере надо анализировать все возможные пути исполнения кода, что в Си значительно труднее сделать.

Kir1 опубликован 17-01-2001 12:06 MSK     Click Here to See the Profile for Kir1  Click Here to Email Kir1     
К вопросу о том зачем это нужно, мне кажется риторический вопрос, тк как бы вы не тестировали программу, всё равно будут ошибки, причем, всем известная истина (пардон), чем больше программа, тем больше ошибок в ней будет... В борланде у себя в конторе мы решали это следующим образом:
1. при создании релиза, сохраняли для этого релиза у себя файл с отладочной информацией
2. в программе реализовывалась функция печати содержимого стека в файл
3. при всех вылетах вызывалась эта функция
По-моему механизм очень не плохой, тк в случае вылета клиент мог прислать нам файл с ошибкой, мы сопоставляем его с файлом отладочной инфы для этого релиза и получаем название модулей, функций и номера строк, таким образом можно локализовать ошибку, вот я и подумал, что, может быть, есть какие-то подобные стандартные механизмы в том же MFC ?
Посоветуйте, подскажите, буду очень благодарен...
x опубликован 17-01-2001 13:21 MSK     Click Here to See the Profile for x  Click Here to Email x     
NuMega тебе поможет

берешь SoftIce или BoundsChecker
выставляешь Release c генерацией Debug Info
SoftIce=>Faults on ; i3here on; i1here on
loader32.exe=>Load=>Translate=>Run

усе Ж)

Belchik опубликован 17-01-2001 13:57 MSK     Click Here to See the Profile for Belchik  Click Here to Email Belchik     
Ребята, а вы вообше читаете что человек спрашивает?
Вы помоему увлеклись
eyes опубликован 17-01-2001 15:13 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
Ну да, увлеклись, а что?
Ему же уже ответили:

>VuDZ опубликован 27-12-2001 18:19 MSK
>-------------------------------------------->------------------------------------
>Может RSDN тебе поможет?
>тама кое чта есть по этому вопросу

Там и правда очень хорошая статья есть.

Kir1 опубликован 17-01-2001 16:34 MSK     Click Here to See the Profile for Kir1  Click Here to Email Kir1     
Там есть 2 статьи:
1. Диагностические средств MFC
2. Как пережить release версию
Я же спрашивал, про обнаружение ошибок после выпуска release программы. Вам когда-нибудь IE выдавал сообщение с вопросом отправить ли ошибку в Microsoft, они же её разбирают как-то... В общем я так понял, что стандартного ничего нету... Спасибо всем кто принял участие в обсуждении этой темы...
eyes опубликован 21-01-2001 18:06 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
По-моему в Ultimate Toolbox было что-то подобное... (я просто в вопрос не въехал без последнего объяснения...)

Делаем макрос MYASSERT:

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

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.