;
; ------------------------------------------------------------
;
; PureBasic - OnError example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
Procedure ErrorHandler()
ErrorMessage$ = "Обнаружена программная ошибка:" + Chr(13)
ErrorMessage$ + Chr(13)
ErrorMessage$ + "Сообщение Ошибки: " + ErrorMessage() + Chr(13)
ErrorMessage$ + "Код Ошибки: " + Str(ErrorCode()) + Chr(13)
ErrorMessage$ + "Адрес кода Ошибки: " + Str(ErrorAddress()) + Chr(13)
If ErrorCode() = #PB_OnError_InvalidMemory
ErrorMessage$ + "Целевой адрес: " + Str(ErrorTargetAddress()) + Chr(13)
EndIf
If ErrorLine() = -1
ErrorMessage$ + "Строка исходного кода: Включить поддержку линий OnError для получения информации о линии кода." + Chr(13)
Else
ErrorMessage$ + "Строка исходного кода: " + Str(ErrorLine()) + Chr(13)
ErrorMessage$ + "Файл исходного кода: " + ErrorFile() + Chr(13)
EndIf
ErrorMessage$ + Chr(13)
ErrorMessage$ + "Содержимое регистров:" + Chr(13)
CompilerSelect #PB_Compiler_Processor
CompilerCase #PB_Processor_x86
ErrorMessage$ + "EAX = " + Str(ErrorRegister(#PB_OnError_EAX)) + Chr(13)
ErrorMessage$ + "EBX = " + Str(ErrorRegister(#PB_OnError_EBX)) + Chr(13)
ErrorMessage$ + "ECX = " + Str(ErrorRegister(#PB_OnError_ECX)) + Chr(13)
ErrorMessage$ + "EDX = " + Str(ErrorRegister(#PB_OnError_EDX)) + Chr(13)
ErrorMessage$ + "EBP = " + Str(ErrorRegister(#PB_OnError_EBP)) + Chr(13)
ErrorMessage$ + "ESI = " + Str(ErrorRegister(#PB_OnError_ESI)) + Chr(13)
ErrorMessage$ + "EDI = " + Str(ErrorRegister(#PB_OnError_EDI)) + Chr(13)
ErrorMessage$ + "ESP = " + Str(ErrorRegister(#PB_OnError_ESP)) + Chr(13)
CompilerCase #PB_Processor_x64
ErrorMessage$ + "RAX = " + Str(ErrorRegister(#PB_OnError_RAX)) + Chr(13)
ErrorMessage$ + "RBX = " + Str(ErrorRegister(#PB_OnError_RBX)) + Chr(13)
ErrorMessage$ + "RCX = " + Str(ErrorRegister(#PB_OnError_RCX)) + Chr(13)
ErrorMessage$ + "RDX = " + Str(ErrorRegister(#PB_OnError_RDX)) + Chr(13)
ErrorMessage$ + "RBP = " + Str(ErrorRegister(#PB_OnError_RBP)) + Chr(13)
ErrorMessage$ + "RSI = " + Str(ErrorRegister(#PB_OnError_RSI)) + Chr(13)
ErrorMessage$ + "RDI = " + Str(ErrorRegister(#PB_OnError_RDI)) + Chr(13)
ErrorMessage$ + "RSP = " + Str(ErrorRegister(#PB_OnError_RSP)) + Chr(13)
ErrorMessage$ + "Display of registers R8-R15 skipped." + Chr(13)
CompilerEndSelect
MessageRequester("Пример OnError", ErrorMessage$)
End
EndProcedure
; Настройка обработчика ошибок.
;
OnErrorCall(@ErrorHandler())
MessageRequester("Пример OnError", "Выполнение кода с ошибками. Отладчик должен быть отключен.")
; Запись в защищенную память.
;
PokeS(123, "Быстрая, коричневая лиса, перепрыгнула через ленивого пса.")
; Деление на ноль.
;
a = 0
a = 1 / a
; Создаём ошибку вручную.
;
RaiseError(#PB_OnError_IllegalInstruction)
; Это не должно отображаться.
;
MessageRequester("Пример OnError", "Выполнение завершено нормально.")
End