Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.154.103] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как осуществлять поиск ошибок в программе написанной на Visual C++ с MFC? Как я себе это представляю, то необходимо отлавливать все исключения сгенерированные программой и распечатываеть в файл содержимое стека... Чтобы по этой распечатке найти потом место в котором собственно и произошел вылет...Есть ли в MFC механизмы для этого? Функция AfxDumpStack() замечательно работает, но только в отладочной версии, а почему не работает в релизе? Подскажите, плз...
|
Сообщ.
#2
,
|
|
|
Неужели никто не сталкивался с такой проблемой? Или я плохо сформулировал свой вопрос?
|
Сообщ.
#3
,
|
|
|
Может RSDN тебе поможет?
тама кое чта есть по этому вопросу |
Сообщ.
#4
,
|
|
|
По-моему, лучше всего протестировать нормально в DEBUG с BoundsChecker. А содержимое стека тебе и так пришлют, когда грохнется :-)).
|
Сообщ.
#5
,
|
|
|
В релизном варианте, при компиляции и линковке не включается отладочная информация, ну там привязка к исходникам, имена функций, номера строк итп., потому AfxDumpStack не имеет достаточно инфы для работы.
Тупой вариант зделать свой стэк, правда тебе придется каждое тело функции заворачивать в try - catch и забыть про return, вообщем гигантская работа, нужна только в больших проэектах, нормально осущевствима только на Си++, и должна быть продумана с самого начала. Другой, нереальный вариант, не делать ошибок Или если доверяешь клиентам пошли отладочную версию. И все дела. успехов |
Сообщ.
#6
,
|
|
|
Так а зачем искать ошибки в Release-версии? Разве отладочная версия не для этого существует?
|
Сообщ.
#7
,
|
|
|
2tonik:
простой пример - int i; в отладочной версии инициализируется нулем, а в релизе - не инициализируется вообще (будет содержать случайное значение). И таких различий очень много. |
Сообщ.
#8
,
|
|
|
У меня например дебуг версия нормально пахала, а в релизе был редкий exception на уровне системы, я его так и не сумел отловить, вопрос там был в multithreading-е
когда запускался второй thread прога давала exception и все. |
Сообщ.
#9
,
|
|
|
2eyes
Так лучше самому инициализировать переменную. И разве компилер не выдаст предупреждения при использовании переменной до инициализации? |
Сообщ.
#10
,
|
|
|
2tonik: Все мы люди, иногда можно чего-нибудь несущественного не заметить, а компилятор невсегда выдает предупреждения когда надо, а иногда делает это когда не надо.
У меня тоже были случаи когда дебаг работал нормально а релиз вызывал милое сообщение - "программа выполнила недопустимую операцию" |
Сообщ.
#11
,
|
|
|
В Яве компилер это делает (предупреждает).
Пример: int i; if (some) { i = 123; } int d = i - 321; // если some == FALSE, имеем грабли. Для этого в компилере надо анализировать все возможные пути исполнения кода, что в Си значительно труднее сделать. |
Сообщ.
#12
,
|
|
|
К вопросу о том зачем это нужно, мне кажется риторический вопрос, тк как бы вы не тестировали программу, всё равно будут ошибки, причем, всем известная истина (пардон), чем больше программа, тем больше ошибок в ней будет... В борланде у себя в конторе мы решали это следующим образом:
1. при создании релиза, сохраняли для этого релиза у себя файл с отладочной информацией 2. в программе реализовывалась функция печати содержимого стека в файл 3. при всех вылетах вызывалась эта функция По-моему механизм очень не плохой, тк в случае вылета клиент мог прислать нам файл с ошибкой, мы сопоставляем его с файлом отладочной инфы для этого релиза и получаем название модулей, функций и номера строк, таким образом можно локализовать ошибку, вот я и подумал, что, может быть, есть какие-то подобные стандартные механизмы в том же MFC ? Посоветуйте, подскажите, буду очень благодарен... |
Сообщ.
#13
,
|
|
|
NuMega тебе поможет
берешь SoftIce или BoundsChecker выставляешь Release c генерацией Debug Info SoftIce=>Faults on ; i3here on; i1here on loader32.exe=>Load=>Translate=>Run усе |
Сообщ.
#14
,
|
|
|
Ребята, а вы вообше читаете что человек спрашивает?
Вы помоему увлеклись |
Сообщ.
#15
,
|
|
|
Ну да, увлеклись, а что?
Ему же уже ответили: >VuDZ опубликован 27-12-2001 18:19 MSK >-------------------------------------------->------------------------------------ >Может RSDN тебе поможет? >тама кое чта есть по этому вопросу Там и правда очень хорошая статья есть. |