OberonCore https://forum.oberoncore.ru/ |
|
Ошибка при переполнении стека https://forum.oberoncore.ru/viewtopic.php?f=2&t=1696 |
Страница 1 из 1 |
Автор: | Илья Ермаков [ Вторник, 07 Июль, 2009 23:35 ] |
Заголовок сообщения: | Ошибка при переполнении стека |
QWERTYProgrammer писал(а): Вроде уже когда-то обсуждалось, но внятного объяснения так и не было, почему простейшая программа с аллокацией большого массива на стеке на 2-3 запуске может убить среду ББ? Код: MODULE TestCrash1; IMPORT Log := StdLog; CONST n=8000; PROCEDURE Do*; VAR a: ARRAY n,n OF REAL; BEGIN Log.Int(LEN(a,0)); Log.Ln; END Do; END TestCrash1. Да, тут такая фигня получается. На переполнение стека ББ выдаёт стандартный системный WinApi.MessageBox. Штука в том, что всю жизнь, сколько помню, эта процедура была блокирующей, т.е. не возвращала управление до нажатия пользователем кнопки ok. Но не знаю почему (то ли начиная с XP? Я недавно перешёл, сидел на 2000-м), теперь она отдаёт управление среде. И если я не нажму кнопку OK в показанном диалоге, а продолжу работу в среде при открытом сообщении, то начинается полная фигня. В частности, фатальное падение. |
Автор: | Vlad [ Среда, 08 Июль, 2009 00:18 ] |
Заголовок сообщения: | Re: Ошибка при переполнении стека |
Цитата: Вроде уже когда-то обсуждалось, но внятного объяснения так и не было, почему простейшая программа с аллокацией большого массива на стеке на 2-3 запуске может убить среду ББ? Переполнение стэка - очень специфичная ошибка и требует очень специфичной обработки (в отлчие от банального AV). Во всяком случае на винде. BB, видимо, не совсем правильно обрабатывает такую ошибку (или вообще обрабатывает по общей схеме). |
Автор: | Илья Ермаков [ Среда, 08 Июль, 2009 00:58 ] |
Заголовок сообщения: | Re: Ошибка при переполнении стека |
Да, возможно, MessageBox не может правильно отработать в условиях переполненного стэка ББ. Надо смотреть, сейчас времени нет... |
Автор: | QWERTYProgrammer [ Среда, 08 Июль, 2009 21:41 ] |
Заголовок сообщения: | Re: Ошибка при переполнении стека |
На моей машине (XP) происходит следующее: при первом запуске появляется окошко с сообщением "stack overflow". После нажатия ОК ББ остается наплаву, можно продолжать работать дальше. Но вот если запустить программу второй раз, то тут уже без появления каких-нибудь сообщений рушится сама среда. |
Автор: | Илья Ермаков [ Среда, 08 Июль, 2009 21:47 ] |
Заголовок сообщения: | Re: Ошибка при переполнении стека |
Там ещё такая штука, что в Винде с какой-то версии даже при заблокированном потоке приложения (если он заблокирован АПИ-вызовом) могут проходить сообщения, что и наблюдалось с этим диалогом. Вроде так. Это вообще крах, конечно, такие фортели ОС. Ну и ББ не согласован с этими обновлениями, видимо, при обработке переполнения. А в 1.6 ошибка возникает, у кого время проверить есть? И накатать бы баг-репорт в Цюрих. |
Автор: | QWERTYProgrammer [ Среда, 08 Июль, 2009 22:10 ] |
Заголовок сообщения: | Re: Ошибка при переполнении стека |
У меня как раз 1.6 |
Автор: | Роман М. [ Вторник, 28 Май, 2013 17:33 ] |
Заголовок сообщения: | Re: Ошибка при переполнении стека |
Есть ли у кого-то исправление этой ошибки сегодня? Если это кому-то было нужно, конечно. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |