1. 第一种方式,加打印记录
%%-define(debug, ok).

-ifdef(debug).
-define(LOG(X), io:format("pid:~p , {~p,~p}: ~p~n", [self(), ?MODULE, ?LINE, X])).
-else.
-define(LOG(X), true).
-endif.

设置LOG的宏定义,调试只要在代码中加入?LOG(Val),就可以

特点是,简单,调试清楚,对代码性能的影响小,也是最常用的方法,就不举例说明了

第二种方法,加trace 日志

%trace Mod 所有方法的调用
trace(Mod) ->
dbg:tracer(),
dbg:p(all, [call]),
dbg:tp(Mod, [{'_', [], [{return_trace}]}]); %trace Mod 的Fun方法的调用
trace(Mod, Fun) ->
dbg:tracer(),
dbg:p(all, [call]),
dbg:tp(Mod, Fun, [{'_', [], [{return_trace}]}]); %停止trace
trace_stop() ->
dbg:stop_clear().

特点:对整个模块,或者某些函数进行详细的调试,调试信息比较多,对性能有一段影响。

举例

......
......
init([Opt]) ->
Tab = ets:new(xx, [set]),
case opt_find(debug, Opt, false) of %%如果设置了debug,开启debug跟踪
true ->
dbg:tracer(),
dbg:p(all, [call]),
dbg:tp(tt5, [{'_', [], [{return_trace}]}]);
_ ->
%% Keep silent
ok
end,
{ok, #state{tab = Tab}}. .....
.....
.....
1> c(tt5).
{ok,tt5}
2> tt5:start([{debug, true}]).
{ok,<0.39.0>}
3> tt5:add(name, "wowchina").
(<0.32.0>) call tt5:add(name,"wowchina")
(<0.39.0>) call tt5:handle_call({add,name,"wowchina"},{<0.32.0>,#Ref<0.0.0.104>},{state,16400})
(<0.39.0>) returned from tt5:handle_call/3 -> {reply,true,{state,16400}}
(<0.32.0>) returned from tt5:add/2 -> true
true
4> tt5:find(name).
(<0.32.0>) call tt5:find(name)
(<0.39.0>) call tt5:handle_call({find,name},{<0.32.0>,#Ref<0.0.0.113>},{state,16400})
(<0.39.0>) returned from tt5:handle_call/3 -> {reply,
[{name,"wowchina"}],
{state,16400}}
(<0.32.0>) returned from tt5:find/1 -> [{name,"wowchina"}]
[{name,"wowchina"}]
5>

erlang调试方法的更多相关文章

  1. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  2. linux Ubuntu(Segmentation fault)段错误出现原因及调试方法

      在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ----------- ...

  3. kernel启动console_init之前console不可用时发生crash的调试方法

    http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...

  4. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  5. 【matlab】MATLAB程序调试方法和过程

    3.8  MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...

  6. 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  7. Linux的段错误调试方法

    linux段错误的调试方法 相关博文: http://blog.csdn.net/htianlong/article/details/7439030 http://www.cnblogs.com/pa ...

  8. Linux - Shell脚本调试方法

    Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...

  9. intellij 调试方法

    intellij 调试方法 转自 http://www.th7.cn/Program/net/201410/296492.shtml

随机推荐

  1. pycharm import pygame 出现报错:No module named 'pygame'

    首先发现装的Python 有问题原来的Python3.6.4版本安装完成后Scripts文件夹里空白的,什么也没有,从https://www.python.org/downloads/windows/ ...

  2. 多对多关联模型,MANY_TOMANY

    先分别创建三张表:think_user   think_group   think_user_group user 表里有id.name字段 group 表里有id.groupName字段 user_ ...

  3. Selenium 2(Webdriver)

    如何用webdriver打开一个浏览器,我们常用的浏览器有firefox和IE两种,firefox是selenium支持得比较成熟的浏览器,很多新的特性都会在firefox中体现.但是做页面的测试,启 ...

  4. 建立请求号 request

    1:获取TR号(一般由团队的负责人创建,发出) 2:进入 i7p系统 3:点击process 4:输入tr号 5:选中 正确的请求号,右键> process item> add task ...

  5. 2018-2019-1 20189203《Linux内核原理与分析》第五周作业

    第一部分 课本学习 用户态.内核态和中断 1.内核态:处于高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态,对所有的指令包括特权指令都可以执行. 2.用户态:处于低的 ...

  6. await异步的,容易理解一点

    C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...

  7. property装饰器以及多态

    property是一种特殊的属性 访问它时执行一段功能然后返回值 class People: def __init__(self, name): self.__name = name @propert ...

  8. Delphi7打开项目提示'one or more lines were too long and has been truncated'

    打开主项目文件直接显示一排'口'形状!查了下资料也问了下伙伴,这多半应该是文件损坏了,解决办法: 1. 不关D7的事,所以重装D7应该是无效的,最好看看自己是不是有备份文件,我之前有备份的所以直接覆盖 ...

  9. spring bean的初始化以及销毁

    spring bean初始化或销毁时执行某些方法,有很多使用场景.比如初始化时,启动bean中的线程池.销毁时释放资源,个人比较喜欢实现InitializingBean和 DisposableBean ...

  10. flutter_webview_plugin 无法加载网页的异常处理

    Flutter 本身并未集成webview,所以当需要使用webview 的时候,使用flutter_webview_plugin插件,也就是使用的原生webview组件, flutter_webvi ...