Re[22]: Дамп стека при возникновении исключения
От: Аноним  
Дата: 03.12.03 09:04
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Hello, lav03!

S>You wrote on Tue, 02 Dec 2003 08:41:11 GMT:

S>>> Эта фигня происходит из-за того, что функция ZwGetContextThread

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

l>> А ведь если отключить оптимизацию, то foo() попадает в дамп.

S>Не верю. Ты наверное что-то перепутал.

l>> Значит в этом случае кадр стека все же формируется?

S>Как это он сформируется для функции из ntdll? Я дизассемблером смотрел — нет там никакой установки ebp, почти сразу int 2E идет.

l>> Можно ли как нибудь заставить функцию кадр стека формироваться, обхитрить?

S>Ну так я говорил уже — опция компилятора /Oy- после опций оптимизации, и все будет почти как надо.

S>Best regards,

S> Sergey.

Понятно, спасибо.

На счет отключения оптимизации я , кажется, действительно перепутал.

Но я пробовал и с /Oy и без нее, результат почему-то одинаков. Не работает. Я даже создал новцй проект для чистоты эксперимента.

Бог с ней с ZwGetContextThread. Мне не понятно, почему в моих OnBnClickedButton1() b foo() кадр стека формируется, а в IntelStackWalk() — нет, ведь все же они в одном проекте с одинаковыми опциями компилчтора скомпилированы.

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