Re[20]: Дамп стека при возникновении исключения
От: lav03  
Дата: 02.12.03 08:41
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Hello, lav03!

S>You wrote on Mon, 01 Dec 2003 08:57:34 GMT:

l>> Нет, на самом деле я ловлю CMemoryException*, это описка. И оно ловится

l>> именно в foo(), только вот foo(), почему-то, в стеке не присутствует во
l>> время снятия списка вызовов. Усли убрать try...catch из foo(), то оно
l>> поймается в OnBnClickedButton1() и адрес этой OnBnClickedButton1() будет
l>> отсутствовать в дампе, а следующим после 7FFE0304 0012FA14 0000:00000000
l>> будет адрес _AfxDispatchCmdMsg. Не понимаю, почему ф-ция, из которой
l>> выброшено C++ исключение отсутствует в списке вызовов, ведь на момент
l>> снятия дампа мы из ее тела еще не вышли.

S>Эта фигня происходит из-за того, что функция ZwGetContextThread скомпилена без кадра стека. Поэтому IntelStackWalk хватает кадр предыдущей функции (foo), из которого вытаскивает адрес возврата на OnBnClickedButton1(). В результате foo в дамп не попадает.


S>Best regards,

S> Sergey.

А ведь если отключить оптимизацию, то foo() попадает в дамп. Значит в этом случае кадр стека все же формируется?
Можно ли как нибудь заставить функцию кадр стека формироваться, обхитрить?

Александр.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.