原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: 留言板
各位兄弟姐妹们,欢迎各种意见和建议,一起学习提高!
Post Footer automatically generated by wp-posturl plugin for wordpress.
英雄所见略同,虽然达到目的,但这手段太劣了点
[Reply]
余老师,你好: 我现在在调试一段erlang服务器的一段程序,遇到一个很奇怪的问题,当程序运行一段时间的时候,在程序中调用receive。。。after的这样的语句时,如果接收不到消息,这个进程就会一直阻塞在那里,及根本不会超时,当我调用timer:sleep/1这样的函数的时候,这个进程也会一直睡觉。当我在另外一台测试服务器上测试的时候却是好的。这两天服务器环境都是一样的。请问余老师以前遇到这样的问题没有,应该怎么来找原因呢?
Yu Feng Reply:November 24th, 2011 at 3:20 pm
用dbg模块跟下消息,我博客里有
qinlinwang Reply:November 24th, 2011 at 4:50 pm
关键是实在执行receive这个语句出不来了,理论上应该在after后面规定的时间内醒来的。 receive这是个关键字语句,怎么跟踪呢?
Yu Feng Reply:November 24th, 2011 at 5:58 pm
那还是把语法好好学学吧
qinlinwang Reply:November 24th, 2011 at 6:00 pm
额,语句写的应该是没有问题的,而且代码再另外一个同样环境的的机器上是好的,不知道在这台为啥就不行
我想问下,在erlang中如何打印函数的调用栈?, 我经常在处理逻辑的时候,读入了一个非法的参数 ,但是我不知道是哪个模块调用了该函数并传入该参数,我想打印出调用的栈过程,
Jovi Reply:December 26th, 2011 at 10:22 am
erlang:process_info(self(), current_stacktrace). erlang:process_display(self(), backtrace). erlang:process_info(self(), backtrace).
Yu Feng Reply:December 26th, 2011 at 8:25 pm
erlang的自省机制很发达~
余老大,看你对erlang非常熟悉啊。最近刚学erlang,想问一下有没有简单点erlang开源程序可以学习?erlang的语法真是用起来变扭,需要看一些人家写代码来提升一下。谢谢!
Yu Feng Reply:December 26th, 2011 at 7:59 pm
https://github.com/basho/rebar 非常不错的学习材料,严谨,易学。
Jiecong Reply:December 27th, 2011 at 8:00 pm
谢了,余老大
霸主,你好.我刚刚学习erlang,去实习然后老大要求我用erlang正则匹配一个1.8g,有10800000行记录的日志文件.不过目前我自己尝试的两种方式是一种用多进程pread,然后每个进程自己分析自己的部分,然后把片段的头尾(就是不成一行的)和匹配数发到Collector进程,这种方式,不做匹配时59770ms,做匹配是82283ms,另一种是用多个进程不断向一个File句柄read_line,读出一行后马上本进程内匹配,然后把结果发给Collector,一直读到eof.这种方式不做匹配是70167ms,做匹配是90917ms,匹配的只是一个测试的正则,就”.*”,然后,想问一下你觉得这两种方案怎么样?我的机器是Dual-core e5800 3.2G,2g内存.而且对于正则有没有什么好的意见,感觉erlang的正则挺慢的.
Yu Feng Reply:January 12th, 2012 at 7:12 pm
时间主要花在读文件上。
Yu Feng Reply:January 12th, 2012 at 8:34 pm
文件要用raw方式打开,然后一次读一段出来,比如64K, 然后用regex处理,多个进程进行,然后汇总。会写的根本不慢。
ClarenceAu Reply:January 12th, 2012 at 10:14 pm
我现在是用binary,我回去再试试用raw。然后你觉得就以这个配置,这个时间你觉得是正常还是太慢了?就是普通台式,cpu和内存我写在原文了。其实时间应该是花在处理读出来的数据上。我试过,用多进程读,然后就读文件用不做任何处理是大概15秒。我觉得就读文件的话,15秒应该是可以接受的速度吧?
ClarenceAu Reply:January 12th, 2012 at 10:20 pm
你说的raw打开,就是说,我只用一个进程去每次读一大段,然后spawn一个处理的进程去处理?因为raw模式打开不是只能在该线程本身去读吗?
Yu Feng Reply:January 13th, 2012 at 1:43 pm
把文件的大小按进程数目划分,每个进程负责offset, offset+size这么大的区间,分别自己raw方式打开文件,每次读取一个chunk,然后再regex,这样应该比单线程的c程序快N倍。
霸主,再问你一个小小的问题.就是我看erlang的书说,atom是不会被gc的,那在实际项目中会不会很容易就会由于atom太多而导致内存占用过高或者内存泄漏的问题.
Yu Feng Reply:January 14th, 2012 at 12:45 pm
atom有上限制的,超过了vm已经崩溃,不用考虑gc的事情了
ClarenceAu Reply:January 17th, 2012 at 10:52 am
霸主,能解释一下ERL_FULLSWEEP_AFTER这个参数的意思吗?我看过你的一篇文章里提到过,但是不是很明白.然后,就是在Erlang的文档里,哪里可以看到所有这些参数的说明?谢谢.
Yu Feng Reply:January 17th, 2012 at 2:10 pm
由于erlang的gc是mark and sweep的标准gc, 通常gc的时候是minor的,就是每次回收点点就好。这个参数的意思是多长时间后进行一次大扫除,全量GC。 注意erlang的回收是针对每个进程进行的。
霸主,我终于解决了之前那个大日志的问题了.竟然是因为我的正则表达式的一点小bug,导致平均每条匹配时间多了5倍,10000k条记录!!那个时间啊.不过对于正则我觉得在使用的时候真得要多加注意.要根据具体实现来写合理的表达式.
Yu Feng Reply:January 17th, 2012 at 5:32 pm
恭喜,数据说话!
ClarenceAu Reply:January 17th, 2012 at 5:45 pm
1.6G日志文件,10000k+条记录,在我的普通台式上,2G内存,Dual-Core E5800 3.2G主频,匹配完成后,时间是用了231秒.不知道这算不算好成绩.我的主管说我能跑到300秒以内就算可以了.
Yu Feng Reply:January 17th, 2012 at 6:18 pm
多核上运行应该快很多~
霸主,我发现erlang里有个binary的module,它里面提供的那些函数很象是一些使用binary来作匹配的的函数,请问那个module里可以用正则表达式吗?还是只是简单的pattern matching?
Yu Feng Reply:January 20th, 2012 at 11:41 pm
re模块支持binary
余锋老大,请教个问题: 我有这么个应用场景:一个程序每秒10万包(每包512字节)的速度写共享存储(GFS2文件系统),另外2个程序监控这个文件,当发现有新的数据写到这个文件后,立即读取出来,这三个程序分别在不同的主机上,要求: 1,写RTT在100us以内; 2,2个读程序的读最新数据的延迟不超过1秒(即写程序写完一块数据后,读程序侦测到,并读到自己内存中的时间);
您看这个能不能实现?如果能的话,需要什么样的硬件?我要申请买设备了,谢谢!
Yu Feng Reply:February 1st, 2012 at 10:41 am
按照你的描述,你的包不是很大,fusionio二代卡在典型的512字节写入的速度在每秒10万以上,写入延时在20-30us,所以距离你的100us是够的。考虑到容量,可以用flashcache做cache,大大减少成本,还能满足你的性能需求。 文件的变更linux有notify接口,可以保证很快的读到数据,1秒足够的。
rock Reply:February 1st, 2012 at 11:43 am
老大,用flashcache的话,数据还能及时到达共享存储吗(比如说SAN)?读这边的及时性会不会不好?
另外,我这个应用的写方类似于数据库的提交事务日志的操作,要求写返回成功后,掉电、文件系统crash等这个数据都不会丢失,即写的时候是fsync方式的,你看fusionio二代能够满足吗?
Yu Feng Reply:February 1st, 2012 at 11:50 am
1. 用flashcache不能及时,所以san读会有问题。 2. fusionio一代和二代都满足这个不丢数据的约束,我们用了很多,1年多了没有发现问题。
rock Reply:February 1st, 2012 at 11:50 am
老大,还有fusionio二代卡有成功应用的案例吗?比如说淘宝?我在证券开发行业,对技术的成熟度要求非常高
Yu Feng Reply:February 1st, 2012 at 11:52 am
我们核心的数据库的对技术的成熟度也是非常高~过几天我们就会拿到卡测试。如果担心的话,可以用一代卡~
rock Reply:February 1st, 2012 at 11:52 am
谢谢,老大,我测试过很多盘,buffer io时性能很好,direct io就挂了,好了,那我就买fusionio吧,非常感谢!
Yu Feng Reply:February 1st, 2012 at 11:58 am
Amy: fusionio的销售email: tongouou@gmail.com
rock Reply:February 1st, 2012 at 12:22 pm
谢谢,余大哥,已经发邮件给Amy了。
我们这个场景要求的是3台主机共享的存储,而且要使用类似GFS2这样的共享文件系统,有分布式锁,真不知道还是否能够达到这个要求,咳,愁啊,测试下吧。
Yu Feng Reply:February 1st, 2012 at 1:10 pm
GFS2文件系统稳定靠谱吗?
rock Reply:February 1st, 2012 at 12:24 pm
另外,余大哥,针对俺这个应用,如果你有更好的实现方案,不吝赐教啊:)
rock Reply:February 1st, 2012 at 1:34 pm
是啊,GFS2的稳定性不好说啊,但是需求要共享存储,读写同个文件,还有别的办法吗?NFS也试了。。。
霸爷,久仰前辈linux系统功底。问个问题,我现在一个项目里需要用到许多系统方面的数据,比如CPU,内存,缓存,swap区等各方面的数据,除了从/proc目录读文件之外,有没有其他方法可以比较漂亮的取得这些数据?
Yu Feng Reply:March 14th, 2012 at 12:13 pm
/proc导出的信息是最根本的,通常都会有专用的工具在/proc的基础上再封装一次,对用户更友好。这类工具很多,有问题我们来谈论。
老栋 Reply:March 17th, 2012 at 8:36 pm
郁闷,评论回复为什么没有邮件通知呢?苦苦盯着邮箱等了好几天哈哈。
@rock rock前辈,可不可以请教你一些分布式文件系统的问题?小弟邮箱 fangdong@pipul.org
Yu Feng Reply:March 17th, 2012 at 10:45 pm
我都在mryuufeng@gmail.com上, gtalk或者邮件都好。
问题来源:《Erlang编程指南》P171页。 marco1.erl ****************************************** -module(marco1). -compile(export_all).
-ifdef(debug). -define(DBG(Str,Args),io:format(Str,Args)). -else. -define(DBG(Str,Args),ok). -endif.
call(Request) -> ?DBG(“~p:call(~p) called~n”,[?MODULE,Request]).
************************************************** 用c(Module,[{d,debug}]).就好使。用compile:file(Module,[debug_info]).就不行. 网上查了以下,例如:http://stackoverflow.com/questions/6830271/requesting-debug-info-in-an-erlang-module-using-compile 好像是Erlang的一个bug。 请指教!谢谢
Yu Feng Reply:April 4th, 2012 at 3:21 pm
Hi, 好
这里要区分2个事情: 1. {d,debug}是定义一个debug的宏。 2. debug_info是指编译出来的beam带有符号信息。
这是完全不同的事情,你之前的问题就在于混了这二样东西!
参见这里:http://erldocs.com/R15B/compiler/compile.html?i=1&search=compile:#file/2
[chuba]$erl Erlang R14B04 (erts-5.8.5) [64-bit] [smp:16:16] [rq:16] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.8.5 (abort with ^G) 1> c(marco1,[{d,debug}]). {ok,marco1} 2> m(marco1). Module marco1 compiled: Date: April 4 2012, Time: 07.13 Compiler options: [export_all,{d,debug}] Object file: /home/chuba/marco1.beam Exports: call/1 module_info/0 module_info/1 ok 3> marco1:call(test). marco1:call(test) called ok 4> compile:file(marco1,[debug_info, {d,debug}]). {ok,marco1} 5> l(marco1). {module,marco1} 6> m(marco1). Module marco1 compiled: Date: April 4 2012, Time: 07.14 Compiler options: [export_all,debug_info,{d,debug}] Object file: /home/chuba/marco1.beam Exports: call/1 module_info/0 module_info/1 ok 7> marco1:call(test). marco1:call(test) called ok 8>
褚霸
我也关注这个话题,呵。
PS: 看到留言里有人叫 余老师 。。。很容易想到 于老师 。。。于谦。。。
霸爷,你好。一直在关注你的blog,受益良多。在此表示感谢。 请求你能不能给个用rebar在windows平台上发布erlang的详细例子, 我再网上找了好多资料,照做,结果在Windows平台发布出去的时候 总是提示调用的函数不存在 (相关函数肯定都是有的)但在Linux上没问题 ,在Windows上使用rebar有什么特别的注意事项
Yu Feng Reply:April 22nd, 2012 at 2:14 pm
最好在linux下玩。
Δ
英雄所见略同,虽然达到目的,但这手段太劣了点
[Reply]
余老师,你好:
我现在在调试一段erlang服务器的一段程序,遇到一个很奇怪的问题,当程序运行一段时间的时候,在程序中调用receive。。。after的这样的语句时,如果接收不到消息,这个进程就会一直阻塞在那里,及根本不会超时,当我调用timer:sleep/1这样的函数的时候,这个进程也会一直睡觉。当我在另外一台测试服务器上测试的时候却是好的。这两天服务器环境都是一样的。请问余老师以前遇到这样的问题没有,应该怎么来找原因呢?
[Reply]
Yu Feng Reply:
November 24th, 2011 at 3:20 pm
用dbg模块跟下消息,我博客里有
[Reply]
qinlinwang Reply:
November 24th, 2011 at 4:50 pm
关键是实在执行receive这个语句出不来了,理论上应该在after后面规定的时间内醒来的。
receive这是个关键字语句,怎么跟踪呢?
[Reply]
Yu Feng Reply:
November 24th, 2011 at 5:58 pm
那还是把语法好好学学吧
qinlinwang Reply:
November 24th, 2011 at 6:00 pm
额,语句写的应该是没有问题的,而且代码再另外一个同样环境的的机器上是好的,不知道在这台为啥就不行
我想问下,在erlang中如何打印函数的调用栈?,
我经常在处理逻辑的时候,读入了一个非法的参数
,但是我不知道是哪个模块调用了该函数并传入该参数,我想打印出调用的栈过程,
[Reply]
Jovi Reply:
December 26th, 2011 at 10:22 am
erlang:process_info(self(), current_stacktrace).
erlang:process_display(self(), backtrace).
erlang:process_info(self(), backtrace).
[Reply]
Yu Feng Reply:
December 26th, 2011 at 8:25 pm
erlang的自省机制很发达~
[Reply]
余老大,看你对erlang非常熟悉啊。最近刚学erlang,想问一下有没有简单点erlang开源程序可以学习?erlang的语法真是用起来变扭,需要看一些人家写代码来提升一下。谢谢!
[Reply]
Yu Feng Reply:
December 26th, 2011 at 7:59 pm
https://github.com/basho/rebar 非常不错的学习材料,严谨,易学。
[Reply]
Jiecong Reply:
December 27th, 2011 at 8:00 pm
谢了,余老大
[Reply]
霸主,你好.我刚刚学习erlang,去实习然后老大要求我用erlang正则匹配一个1.8g,有10800000行记录的日志文件.不过目前我自己尝试的两种方式是一种用多进程pread,然后每个进程自己分析自己的部分,然后把片段的头尾(就是不成一行的)和匹配数发到Collector进程,这种方式,不做匹配时59770ms,做匹配是82283ms,另一种是用多个进程不断向一个File句柄read_line,读出一行后马上本进程内匹配,然后把结果发给Collector,一直读到eof.这种方式不做匹配是70167ms,做匹配是90917ms,匹配的只是一个测试的正则,就”.*”,然后,想问一下你觉得这两种方案怎么样?我的机器是Dual-core e5800 3.2G,2g内存.而且对于正则有没有什么好的意见,感觉erlang的正则挺慢的.
[Reply]
Yu Feng Reply:
January 12th, 2012 at 7:12 pm
时间主要花在读文件上。
[Reply]
Yu Feng Reply:
January 12th, 2012 at 8:34 pm
文件要用raw方式打开,然后一次读一段出来,比如64K, 然后用regex处理,多个进程进行,然后汇总。会写的根本不慢。
[Reply]
ClarenceAu Reply:
January 12th, 2012 at 10:14 pm
我现在是用binary,我回去再试试用raw。然后你觉得就以这个配置,这个时间你觉得是正常还是太慢了?就是普通台式,cpu和内存我写在原文了。其实时间应该是花在处理读出来的数据上。我试过,用多进程读,然后就读文件用不做任何处理是大概15秒。我觉得就读文件的话,15秒应该是可以接受的速度吧?
ClarenceAu Reply:
January 12th, 2012 at 10:20 pm
你说的raw打开,就是说,我只用一个进程去每次读一大段,然后spawn一个处理的进程去处理?因为raw模式打开不是只能在该线程本身去读吗?
Yu Feng Reply:
January 13th, 2012 at 1:43 pm
把文件的大小按进程数目划分,每个进程负责offset, offset+size这么大的区间,分别自己raw方式打开文件,每次读取一个chunk,然后再regex,这样应该比单线程的c程序快N倍。
霸主,再问你一个小小的问题.就是我看erlang的书说,atom是不会被gc的,那在实际项目中会不会很容易就会由于atom太多而导致内存占用过高或者内存泄漏的问题.
[Reply]
Yu Feng Reply:
January 14th, 2012 at 12:45 pm
atom有上限制的,超过了vm已经崩溃,不用考虑gc的事情了
[Reply]
ClarenceAu Reply:
January 17th, 2012 at 10:52 am
霸主,能解释一下ERL_FULLSWEEP_AFTER这个参数的意思吗?我看过你的一篇文章里提到过,但是不是很明白.然后,就是在Erlang的文档里,哪里可以看到所有这些参数的说明?谢谢.
[Reply]
Yu Feng Reply:
January 17th, 2012 at 2:10 pm
由于erlang的gc是mark and sweep的标准gc, 通常gc的时候是minor的,就是每次回收点点就好。这个参数的意思是多长时间后进行一次大扫除,全量GC。 注意erlang的回收是针对每个进程进行的。
霸主,我终于解决了之前那个大日志的问题了.竟然是因为我的正则表达式的一点小bug,导致平均每条匹配时间多了5倍,10000k条记录!!那个时间啊.不过对于正则我觉得在使用的时候真得要多加注意.要根据具体实现来写合理的表达式.
[Reply]
Yu Feng Reply:
January 17th, 2012 at 5:32 pm
恭喜,数据说话!
[Reply]
ClarenceAu Reply:
January 17th, 2012 at 5:45 pm
1.6G日志文件,10000k+条记录,在我的普通台式上,2G内存,Dual-Core E5800 3.2G主频,匹配完成后,时间是用了231秒.不知道这算不算好成绩.我的主管说我能跑到300秒以内就算可以了.
[Reply]
Yu Feng Reply:
January 17th, 2012 at 6:18 pm
多核上运行应该快很多~
霸主,我发现erlang里有个binary的module,它里面提供的那些函数很象是一些使用binary来作匹配的的函数,请问那个module里可以用正则表达式吗?还是只是简单的pattern matching?
[Reply]
Yu Feng Reply:
January 20th, 2012 at 11:41 pm
re模块支持binary
[Reply]
余锋老大,请教个问题:
我有这么个应用场景:一个程序每秒10万包(每包512字节)的速度写共享存储(GFS2文件系统),另外2个程序监控这个文件,当发现有新的数据写到这个文件后,立即读取出来,这三个程序分别在不同的主机上,要求:
1,写RTT在100us以内;
2,2个读程序的读最新数据的延迟不超过1秒(即写程序写完一块数据后,读程序侦测到,并读到自己内存中的时间);
您看这个能不能实现?如果能的话,需要什么样的硬件?我要申请买设备了,谢谢!
[Reply]
Yu Feng Reply:
February 1st, 2012 at 10:41 am
按照你的描述,你的包不是很大,fusionio二代卡在典型的512字节写入的速度在每秒10万以上,写入延时在20-30us,所以距离你的100us是够的。考虑到容量,可以用flashcache做cache,大大减少成本,还能满足你的性能需求。 文件的变更linux有notify接口,可以保证很快的读到数据,1秒足够的。
[Reply]
rock Reply:
February 1st, 2012 at 11:43 am
老大,用flashcache的话,数据还能及时到达共享存储吗(比如说SAN)?读这边的及时性会不会不好?
另外,我这个应用的写方类似于数据库的提交事务日志的操作,要求写返回成功后,掉电、文件系统crash等这个数据都不会丢失,即写的时候是fsync方式的,你看fusionio二代能够满足吗?
[Reply]
Yu Feng Reply:
February 1st, 2012 at 11:50 am
1. 用flashcache不能及时,所以san读会有问题。
2. fusionio一代和二代都满足这个不丢数据的约束,我们用了很多,1年多了没有发现问题。
rock Reply:
February 1st, 2012 at 11:50 am
老大,还有fusionio二代卡有成功应用的案例吗?比如说淘宝?我在证券开发行业,对技术的成熟度要求非常高
Yu Feng Reply:
February 1st, 2012 at 11:52 am
我们核心的数据库的对技术的成熟度也是非常高~过几天我们就会拿到卡测试。如果担心的话,可以用一代卡~
rock Reply:
February 1st, 2012 at 11:52 am
谢谢,老大,我测试过很多盘,buffer io时性能很好,direct io就挂了,好了,那我就买fusionio吧,非常感谢!
Yu Feng Reply:
February 1st, 2012 at 11:58 am
Amy: fusionio的销售email: tongouou@gmail.com
rock Reply:
February 1st, 2012 at 12:22 pm
谢谢,余大哥,已经发邮件给Amy了。
我们这个场景要求的是3台主机共享的存储,而且要使用类似GFS2这样的共享文件系统,有分布式锁,真不知道还是否能够达到这个要求,咳,愁啊,测试下吧。
Yu Feng Reply:
February 1st, 2012 at 1:10 pm
GFS2文件系统稳定靠谱吗?
rock Reply:
February 1st, 2012 at 12:24 pm
另外,余大哥,针对俺这个应用,如果你有更好的实现方案,不吝赐教啊:)
rock Reply:
February 1st, 2012 at 1:34 pm
是啊,GFS2的稳定性不好说啊,但是需求要共享存储,读写同个文件,还有别的办法吗?NFS也试了。。。
霸爷,久仰前辈linux系统功底。问个问题,我现在一个项目里需要用到许多系统方面的数据,比如CPU,内存,缓存,swap区等各方面的数据,除了从/proc目录读文件之外,有没有其他方法可以比较漂亮的取得这些数据?
[Reply]
Yu Feng Reply:
March 14th, 2012 at 12:13 pm
/proc导出的信息是最根本的,通常都会有专用的工具在/proc的基础上再封装一次,对用户更友好。这类工具很多,有问题我们来谈论。
[Reply]
老栋 Reply:
March 17th, 2012 at 8:36 pm
郁闷,评论回复为什么没有邮件通知呢?苦苦盯着邮箱等了好几天哈哈。
[Reply]
@rock rock前辈,可不可以请教你一些分布式文件系统的问题?小弟邮箱 fangdong@pipul.org
[Reply]
Yu Feng Reply:
March 17th, 2012 at 10:45 pm
我都在mryuufeng@gmail.com上, gtalk或者邮件都好。
[Reply]
问题来源:《Erlang编程指南》P171页。
marco1.erl
******************************************
-module(marco1).
-compile(export_all).
-ifdef(debug).
-define(DBG(Str,Args),io:format(Str,Args)).
-else.
-define(DBG(Str,Args),ok).
-endif.
call(Request) ->
?DBG(“~p:call(~p) called~n”,[?MODULE,Request]).
**************************************************
用c(Module,[{d,debug}]).就好使。用compile:file(Module,[debug_info]).就不行.
网上查了以下,例如:http://stackoverflow.com/questions/6830271/requesting-debug-info-in-an-erlang-module-using-compile
好像是Erlang的一个bug。
请指教!谢谢
[Reply]
Yu Feng Reply:
April 4th, 2012 at 3:21 pm
Hi, 好
这里要区分2个事情:
1. {d,debug}是定义一个debug的宏。
2. debug_info是指编译出来的beam带有符号信息。
这是完全不同的事情,你之前的问题就在于混了这二样东西!
参见这里:http://erldocs.com/R15B/compiler/compile.html?i=1&search=compile:#file/2
[chuba]$erl
Erlang R14B04 (erts-5.8.5) [64-bit] [smp:16:16] [rq:16] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.8.5 (abort with ^G)
1> c(marco1,[{d,debug}]).
{ok,marco1}
2> m(marco1).
Module marco1 compiled: Date: April 4 2012, Time: 07.13
Compiler options: [export_all,{d,debug}]
Object file: /home/chuba/marco1.beam
Exports:
call/1
module_info/0
module_info/1
ok
3> marco1:call(test).
marco1:call(test) called
ok
4> compile:file(marco1,[debug_info, {d,debug}]).
{ok,marco1}
5> l(marco1).
{module,marco1}
6> m(marco1).
Module marco1 compiled: Date: April 4 2012, Time: 07.14
Compiler options: [export_all,debug_info,{d,debug}]
Object file: /home/chuba/marco1.beam
Exports:
call/1
module_info/0
module_info/1
ok
7> marco1:call(test).
marco1:call(test) called
ok
8>
褚霸
[Reply]
我也关注这个话题,呵。
PS: 看到留言里有人叫 余老师 。。。很容易想到 于老师 。。。于谦。。。
[Reply]
霸爷,你好。一直在关注你的blog,受益良多。在此表示感谢。
请求你能不能给个用rebar在windows平台上发布erlang的详细例子,
我再网上找了好多资料,照做,结果在Windows平台发布出去的时候 总是提示调用的函数不存在
(相关函数肯定都是有的)但在Linux上没问题 ,在Windows上使用rebar有什么特别的注意事项
[Reply]
Yu Feng Reply:
April 22nd, 2012 at 2:14 pm
最好在linux下玩。
[Reply]