檢視原始碼 (View Source) error_handler (kernel v10.2)
預設系統錯誤處理器。
此模組定義在發生某些類型的錯誤時會發生的情況。
您可以透過呼叫 erlang:process_flag(error_handler, NewErrorHandler)
來變更程序的錯誤處理器。
注意事項 (Notes)
error_handler
中的程式碼很複雜。在完全理解錯誤處理器、程式碼伺服器的 init
程序和程式碼的 I/O 機制之間的交互作用之前,請勿變更它。
看似小的程式碼變更可能會導致死鎖,因為可能會發生無法預見的後果。在此類程式碼中使用 input
是危險的。
摘要 (Summary)
函式 (Functions)
引發一個帶有堆疊追蹤的 undef
異常,表示 Module:Function/N
未定義。
如果呼叫 Module:Function(Arg1,.., ArgN)
且 Module:Function/N
未定義,則執行階段系統會呼叫此函式。請注意,此函式是在進行原始呼叫的程序內進行評估。
如果呼叫 Fun(Arg1,.., ArgN)
時,定義 fun 的模組未載入,則會評估此函式。此函式是在進行原始呼叫的程序內進行評估。
函式 (Functions)
raise_undef_exception(Module, Function, Args)
檢視原始碼 (View Source) (自 OTP R16B 起)-spec raise_undef_exception(Module, Function, Args) -> no_return() when Module :: atom(), Function :: atom(), Args :: list().
引發一個帶有堆疊追蹤的 undef
異常,表示 Module:Function/N
未定義。
-spec undefined_function(Module, Function, Args) -> any() when Module :: atom(), Function :: atom(), Args :: list().
如果呼叫 Module:Function(Arg1,.., ArgN)
且 Module:Function/N
未定義,則執行階段系統會呼叫此函式。請注意,此函式是在進行原始呼叫的程序內進行評估。
此函式首先嘗試自動載入 Module
。如果無法做到,則會引發 undef
異常。
如果可以載入 Module
且函式 Function/N
已匯出,則會呼叫它。
否則,如果函式 '$handle_undefined_function'/2
已匯出,則會將其呼叫為 '$handle_undefined_function'(
Function, Args)。
警告 (Warning)
強烈建議不要在一般應用程式碼中定義
'$handle_undefined_function'/2
。很容易犯下可能需要很長時間才能除錯的細微錯誤。此外,沒有任何靜態程式碼分析工具(例如 Dialyzer 和 Xref)支援使用'$handle_undefined_function'/2
,並且不會新增此類支援。僅在仔細考慮過其他較不危險的解決方案後才使用此函式。潛在合法用途的一個範例是在測試和除錯期間為其他子系統建立存根。
否則,會引發 undef
異常。
-spec undefined_lambda(Module, Fun, Args) -> term() when Module :: atom(), Fun :: fun(), Args :: list().
如果呼叫 Fun(Arg1,.., ArgN)
時,定義 fun 的模組未載入,則會評估此函式。此函式是在進行原始呼叫的程序內進行評估。
如果 Module
是直譯的,則會調用直譯器,並傳回直譯的 Fun(Arg1,.., ArgN)
呼叫的傳回值。
否則,如果可能,在嘗試自動載入 Module
之後,它會傳回 apply(Fun, Args)
的值。如果無法做到,則呼叫將因退出原因 undef
而失敗。