OberonCore https://forum.oberoncore.ru/ |
|
Можно ли обрабатывать прерывания от ASSERT ? https://forum.oberoncore.ru/viewtopic.php?f=2&t=843 |
Страница 1 из 1 |
Автор: | sia [ Четверг, 24 Январь, 2008 21:58 ] |
Заголовок сообщения: | Можно ли обрабатывать прерывания от ASSERT ? |
Хочу написать тестовую программу, для проверки своего модуля ББ после внесения изменений. Как проверять исключения от операторов ASSERT, есть ли такая возможность? |
Автор: | Илья Ермаков [ Пятница, 25 Январь, 2008 13:39 ] |
Заголовок сообщения: | Re: Можно ли обрабатывать прерывания от ASSERT ? |
В принципе, для этого можно использовать Kernel.Try (не пользовался, пробуйте сами) + посмотреть, как там DevDebug это раскручивает (TrapHandler инсталлируется) - там найдёте коды, соотв. разным исключениям времени выполнения. Вот тут участник форума предлагал свою реализацию try-except: viewtopic.php?f=2&t=294 |
Автор: | sia [ Пятница, 25 Январь, 2008 20:55 ] |
Заголовок сообщения: | Re: Можно ли обрабатывать прерывания от ASSERT ? |
Спасибо Илья! Посмотрел, получил что требовалось, вот пример: MODULE T_Trap; (* sia *) IMPORT StdLog, Kernel; VAR res, err: INTEGER; PROCEDURE trapChk(); BEGIN err := Kernel.err END trapChk; PROCEDURE trapView(); BEGIN END trapView; PROCEDURE TestAssert(a, b, c: INTEGER); BEGIN res := 0; err := 0; IF a = 21 THEN ASSERT(a = 0, 21); res := 21 ELSIF a = 41 THEN ASSERT(a = 0, 42); res := 42 ELSE res := 99 END; INC(res, 100); END TestAssert; PROCEDURE Do*; VAR a, b, c: INTEGER; BEGIN Kernel.SetTrapGuard(FALSE); Kernel.InstallTrapViewer(trapView); Kernel.InstallTrapChecker(trapChk); Kernel.Try( TestAssert, 21, 0, 0); StdLog.String("21 ? res, err = "); StdLog.Int(res); StdLog.Int(err); StdLog.Bool(err = 21); StdLog.Ln(); Kernel.Try( TestAssert, 41, 0, 0); StdLog.String("41 ? res, err = "); StdLog.Int(res); StdLog.Int(err); StdLog.Bool(err = 41); StdLog.Ln(); Kernel.Try( TestAssert, 99, 0, 0); StdLog.String("0 ? res, err = "); StdLog.Int(res); StdLog.Int(err); StdLog.Bool(err = 0); StdLog.Ln(); END Do; END T_Trap. T_Trap.Do; (* Log: 21 ? res, err = 0 21 $TRUE 41 ? res, err = 0 42 $FALSE 0 ? res, err = 199 0 $TRUE *) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |