![](/img/trans.png)
[英]How do I debug rebar3 erlang in vscode with the erlang plugin?
[英]How to debug my Eunit test suite run when using rebar3?
我用 rebar3 (beta-4) 創建了一個release
應用程序。 添加了一些 eunit 測試並編寫了一些代碼。
現在我必須調試一個測試用例,看看我必須添加什么才能使實現正常工作。
我從 Erlang 控制台找到了一些關於使用dbg
的文章,並且找到了如何從 Eunit 編寫調試信息。 但是我需要從我必須測試的代碼中獲取信息(實際實現(邏輯))。
當rebar3
與eunit
參數一起使用時,有沒有辦法調試 Erlang 代碼(實際源代碼,而不是測試代碼)?
我在終端中使用跟蹤: https ://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/
一種方法是使用rebar3
在測試配置文件下運行 shell,然后啟動調試器並設置斷點等:
$ rebar3 as test shell
...
1> debugger:start().
{ok, <0.67.0>}
這將彈出 調試器 GUI 。 調試器設置並准備就緒后,在eunit
下運行測試:
2> eunit:test(your_test_module,[verbose]).
======================== EUnit ========================
your_test_module: xyz_test_ (module 'your_test_module')...
假設您在調試器中設置了一個合適的斷點,這將命中它,但您可能會遇到這種方法的問題:默認情況下, eunit
測試在 5 秒后超時,這不會給您太多時間進行調試. 您需要為測試指定更長的超時時間,這就是為什么上面的示例顯示正在運行的是名為xyz_test_
的測試夾具,它用較長的超時時間包裝實際測試。 這樣的夾具非常簡單:
-include_lib("eunit/include/eunit.hrl").
xyz_test_() ->
{timeout,3600,
[fun() -> ?assertMatch(expected_value, my_module:my_fun()), ok end]}.
在這里,實際測試是匿名函數,它與my_module:my_fun/0
的返回值相匹配,在這個例子中它代表被測試的業務邏輯。 此示例夾具將測試超時設置為一小時; 您當然可以根據應用程序的需要進行設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.