当前位置:  开发笔记 > 编程语言 > 正文

如何在rebar3 eunit中调试erlang代码?

如何解决《如何在rebar3eunit中调试erlang代码?》经验,为你挑选了1个好方法。

release用rebar3(beta-4)创建了一个应用程序.添加了一些eunit测试并编写了一些代码.

现在我必须调试一个测试用例,看看我必须添加什么才能使实现正常工作.

我发现了一些关于在erlang控制台中使用dbg的文章,我发现了如何从eunit编写调试信息.但我需要从我必须测试的代码中获取信息(实际的实现(逻辑)).

rebar3eunit参数一起使用时,有没有办法调试erlang代码(实际的源代码,而不是测试代码)?

谢谢


目前我在终端中使用跟踪:https://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/



1> Steve Vinosk..:

一种方法是使用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,对于此示例,它表示正在测试的业务逻辑.此示例夹具将测试超时设置为一小时; 您当然可以根据应用需要进行设置.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有