Re[19]: Дамп стека при возникновении исключения
От: Sergey Россия  
Дата: 01.12.03 14:03
Оценка:
Hello, lav03!
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> снятия дампа мы из ее тела еще не вышли.

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

Best regards,
Sergey.
Posted via RSDN NNTP Server 1.8 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.