2009-07-07 3 views
0

У меня есть, вероятно, переполнение стека в моем приложении (конечно, только в режиме освобождения ...) и хотелось бы добавить к нему некоторый код защиты/расследования. Я ищу API Windows, чтобы сообщить мне текущее состояние стека потоков (i..e, общий размер и используемый размер). кто-нибудь?Как проверить текущее состояние стека потоков

ТНХ Ноам

ответ

1

Общего размер стека будет размером стеки вы просили, когда вы создали нить (или связанную программу, если это основной поток).

Есть некоторые предварительные ссылки на получение размера стека для пула потоков в Windows 7 на MSDN (QueryThreadpoolStackInformation).

В качестве приближения вы можете сравнить адрес локальной переменной с адресом другой локальной переменной далее по стеку, чтобы получить сумму от нас. Я считаю, что то, как программа, запущенная в Windows, выбирает локальные переменные в пространстве виртуальной памяти, выделяется в поток, зависит от реализации исполняемого файла этого языка, а не того, что действительно знает о Windows; вместо этого вы получаете исключение, когда пытаетесь получить доступ к адресу чуть ниже памяти, выделенной для стека.

Другой альтернативой усложнению кода с проверкой того, достиг ли стека лимита, является добавление обработчика исключений для EXCEPTION_STACK_OVERFLOW, который будет вызван ОС при проверке того, что стек достиг своего предела. Есть пример here.