Здравствуйте, 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() попадает в дамп. Значит в этом случае кадр стека все же формируется?
Можно ли как нибудь заставить функцию кадр стека формироваться, обхитрить?