Erlang執行時的錯誤

2021-08-29 10:08:57 字數 1177 閱讀 2771

erlang執行時發生錯誤時,會返回一些錯誤資訊,理解這些資訊,對於學好、用好erlang來說是必要。

erlang中的執行錯誤包括:badarg, badarith, badmatch, function_clause, case_clause, if_clause, undef, noproc, system_limit等。

這個錯誤很好理解,引數型別錯誤,傳入函式的引數和函式宣告要求的引數型別不匹配。

arith,atithmetic的簡寫,運算錯誤,例如將乙個整數和乙個atom相加。

模式匹配錯誤

從字面意思上看,是函式條款的錯誤。該錯誤資訊表示找不到匹配的函式。例如,定義乙個函式test:add/2,接收兩個整數,並返回它們的和。如果傳入小數,將找不到匹配的分支,會丟擲function_clause。

case表示式找不到匹配的分支。一般要把「_」加到最後的分支中,作為容錯或者其它。

erlang中if表示式是case表示式的一種特殊方式,要求至少有乙個分支測試條件的結果為true,否則會引發錯誤。

呼叫未定義的函式或者模組時,返回該錯誤資訊。

程序不存在,例如gen_server:call乙個不存在的程序。

pid = pid(0, 100, 10).

gen_server:call(pid, test).

** exception exit: }

in function gen_server:call/2 (gen_server.erl, line 182)

超出系統上限,如atom,ets,port,process等。

在開發中可使用try,catch捕獲異常,同時也可以呼叫erlang:get_stacktrace()獲取棧資訊,定位錯誤。

try:

exprs

catch

class:reason ->

%% 異常處理**

%% class為異常型別,reason為異常原因

okend.

例如:try:

whatever

catch

class:reason ->

io:format("class:~p, reason:~p~nstacktrace:~n~p",

[class, reason, erlang:get_stacktrace()]),

error

end.

std map insert執行時錯誤

今天除錯程式時,在std map insert 會產生錯誤中斷,分析過程如下 定義了乙個全域性的map變數,在a.h中宣告,在a.cpp中定義並定義了初始化函式 在另乙個檔案use a.cpp中,呼叫map變數初始化函式initmaptimeinter 執行時在maptimeinter.insert...

JScript 執行時錯誤

jscript 執行時錯誤是指當 jscript 指令碼試圖執行乙個系統不能執行的動作時導致的錯誤。當正在執行指令碼 計算變數表示式 或者正在動態分配記憶體時出現 jscript 執行時錯誤時。錯誤號 描述 5029 陣列長度必須為一有限正整數 5030 必須賦給陣列長度乙個有限正數 5028 需要...

FREE PASCAL 執行時錯誤表

1無效dos功能號 2檔案末找到 3路徑未找到 4開啟檔案過多 5禁止檔案訪問 6無效檔案控制代碼 12無效檔案訪問 15無效驅動器號 16不能刪除當前日錄 17不能跨驅動器改檔名 i o錯誤 100磁碟讀錯誤 101磁碟寫錯誤 102檔案變數末賦值 103檔案未開啟 104檔案未用輸入方式開啟 1...