Сомнение в коде StackWalker - PullRequest
       0

Сомнение в коде StackWalker

1 голос
/ 30 декабря 2010

Вот страница проекта http://www.codeproject.com/KB/threads/StackWalker.aspx

[STACKFRAME64][1] s;

//s contains the current stack frame filled by calling [StackWalk64][2] WinAPI

if (s.AddrPC.Offset == s.AddrReturn.Offset)
{
  printf("StackWalk64-Endless-Callstack!");
}

Мой вопрос: когда будет выполнено это условие?Какие адреса содержат s.AddrPC.Offset, s.AddrReturn.Offset?Адрес возврата в последнем кадре в стеке = 0?

1 Ответ

1 голос
/ 30 декабря 2010

Надеюсь, никогда, но это базовая проверка работоспособности на случай, если стековый фрейм растоптан.Что не исключено, когда вы пытаетесь обойти стек в обработчике исключений, вызываемом неприятным аппаратным исключением, таким как AccessViolation.Без этой проверки код будет входить в бесконечный цикл, постоянно находя один и тот же кадр стека.

AddrPC - адрес инструкции вызова, AddrReturn - адрес возврата, адрес предыдущей инструкции вызова (+5).Не уверен, что может означать «стек 0».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...