You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EUnit中debugMsg使用报错及超时测试打印调试方法咨询

Erlang EUnit 常见调试问题解决

一、debugMsg/1 报错"undefined"的解决

debugMsg是EUnit提供的宏,不是普通Erlang函数,出现这个错误大概率是使用方式不对,按以下两点检查:

  • 必须在模块开头导入EUnit的头文件:
    -include_lib("eunit/include/eunit.hrl").
    
  • 调用时要以宏的方式使用,不要加句点(.)当成函数调用。正确示例:
    debugMsg("This is a debug message");
    debugMsg(test_atom);
    debugMsg(["IO", "list", "message"])
    
    如果写成debugMsg("msg").,Erlang会把它当成普通函数调用,自然找不到定义。

二、超时测试用例中输出调试信息的方法

EUnit默认会捕获测试用例的IO输出,超时场景下可能无法直接看到io:format的内容,可通过以下方式解决:

  • 优先用EUnit自带的debugMsg宏:只要正确导入头文件,这个宏的输出会绕过EUnit的IO捕获,即使测试超时,调试信息也会被打印出来。
  • 让EUnit不捕获IO输出:
    1. 单个测试用例设置:用{debug, ...}包裹测试用例,示例:
      timeout_test_() ->
          {debug, [fun my_timeout_case/0]}.
      
    2. 全局启动参数:运行EUnit时加上verbose选项,命令行或代码里都可以:
      eunit:test(my_module, [verbose]).
      
  • 输出到文件:如果以上方法都不行,可以直接把调试内容写入文件,避免被EUnit捕获:
    {ok, Fd} = file:open("eunit_debug.log", [append]),
    io:format(Fd, "Timeout debug data: ~p~n", [SomeData]),
    file:close(Fd).
    

内容的提问来源于stack exchange,提问作者Piskator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:01:54