[Erlang18]教练!又发现Erlang Shell里面的神奇函数一只

时间:2022-06-01 17:48:26
 
人嘛,总是想提高效率,创造更多的价值,同时也得到更多的选择空间。可一个人的精力,时间终归是有限的,减少自身重复或无意义工作就显得格外重要!
要么懂得授权,要么把重复的工作交给机器来做:
现实: 美国人喜欢把不重要的开发外包给其它国家,自己做核心;
身边:上级们不都是把他们认为不值得亲自做的事派发给下级,自己留精力去琢磨更重要的事么?
 
但苦逼如我,根本木有授权,所以只好费劲心思想尽办法让机器来做。
 
所以我先从工作调试用得最多的就是shell里面下手,有必要重温下c.erl这个模块,看文档真是"磨刀"好方法,挑几个很cool的函数来试下。
 

 
C.erl是一个Command Interface Module,
里面的函数只用于shell,有时竟然可以调用时省略掉模块名,比如这样   c:pid(A,B,C) ----->pid(A,B,C).
 
 
1.
bt(Pid) -> ok | undefined
就是erlang:process_display(Pid, backtrace)的简写版本,可以查看Pid进程的堆栈调用关系
 
2. 
c(File) -> {ok, Module} | error
c(File, Options) -> {ok, Module} | error
c/1,2 编译,然后再把模块加加载到code server里面. Options 默认为 []. 等价于:
 
compile:file(File, Options ++ [report_errors, report_warnings])
 
3.
cd(Dir) -> ok
改变工作目录
 > cd("../erlang").
/home/ron/erlang
4.
flush() -> ok
把接受到的消息都刷新到shell里面显示(这个大家很熟啦,Joe大叔教学时一直用).
 
5.
help() -> ok
显示所有的帮助信息,显示此模块里面可用的所有函数信息.
 
6.
i() -> ok
ni() -> ok
i/0 显示本地系统相关信息,会把所有进程概要给你. ni/0 也是如此, 但是对互连的所有节点信息
 
7.
i(X, Y, Z) -> [{atom(), term()}]

Types:
X = Y = Z = integer() >= 0
显示指定进程的信息,等价于 process_info(pid(X, Y, Z)).
 
8.
l(Module) -> code:load_ret()
消除旧代码并更新最新的代码,如果你想在函数级进里使用这个函数功能,最后是用code:purge(Module) , code:load_file(Module).
 
9.
lc(Files) -> ok

Types:
Files = [File]
File = file:filename()
使用 compile:file(File, [report_errors, report_warnings])编译所有的Files.
 
10.
ls() -> ok
 
和linux下的ls命令一样:列出当前文件夹的所有文件.
 
11.
m() -> ok
显示所有已加载模块的信息,包含他们的头文件信息.
 
12.
m(Module) -> ok
显示Module的相关信息,你可以通过这个来查看你要加载的模块是不是更新成功了
 
13.
nc(File) -> {ok, Module} | error
nc(File, Options) -> {ok, Module} | error Types:
File = file:name()
Options = [Option] | Option
Option = compile:option()
Module = module()
compile:file(File, Options ++ [report_errors, report_warnings]) 然后加载到所有的节点上!!!
 
14.
nl(Module) -> abcast | error
将指定模块加载到所有已连接的节点.
 
15.
regs() -> ok
nregs() -> ok
regs/0 显示当前节点的所有注册进程信息 nregs/0 也是一样,不过是所有节点的.
 

上面的大部分函数我都用过,但这次温习得到的最大收获就是:nc/1 和nl/1这2个函数,我以前都不知道!太强大了,不掌握简直是暴殄天物!
最近刚好有个情景可以用得上:
情景:
1. 测试把一个Bug流离给你;
2.你在自己本地修改好;
3.打开Erlang shell 编译热加载;
4.在本地自己测试一通;过了还要提交,再在测试用的服务器上再重复3过程;
这还是顺利的时候,复杂时:你在本地明明过了,测试到了测试服务器上怎么都不过,肯定2地代码没有同步,这时还要找到那个没同步的文件,这种都是费时不讨好的活。
 
说白了就是解决测试服用的代码和你本地的代码一致!
 
你可以把3中加载里直接把本服和测试服都加载好这个模块!!!,这样就不会再有不一致的沟通问题啦:
在user_default.erl里面封装一下:
 
nc_my(File) ->
net_kernel:connect_node('测试服Node'),
nc(File).
用上这个后,感觉爽多了。
 
 [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只
如果你发现什么神奇的函数,也欢迎在这里分享哇!

 [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只
既使脚再短,也要义无反顾陪你一起翻山越岭~~~~~~~~
 

随机推荐

  1. Windows 编程中的字符串(2)

    (1)windows写日志系统 void writeDebugEventLog(TCHAR* pszMessage, WORD wType) { //#ifdef _DEBUG HANDLE hEve ...

  2. ExceptionLess异常日志收集框架-1

    哈哈,中秋和代码更配哦,不知不觉一年过半了,祝园友们中秋快乐 前一阵子在博客园看到了一篇博文 http://www.cnblogs.com/savorboard/p/exceptionless.htm ...

  3. Comet技术浅论

    1.如何实现一个轮询? function getMessage(url,callback){ var XHR=new XMLHttpRequest(); XHR.open('get',url,true ...

  4. php中json_encode中文编码问题分析

    众所周知使用json_encode可以方便快捷地将对象进行json编码,但是如果对象的属性中存在着中文,问题也就随之而来了.json_encode会将中文转换为unicode编码例如:'胥'经过jso ...

  5. (原创)android4.4沉浸式标题栏

    趁着清明节的闲工夫,把我的百年不升级一次系统的红米note手机升级到了miuiv6的系统,早就听说android4.4的系统有沉浸式标题栏,一直没有体验过.这次终于有机会了.看了几个手机上常用的应用都 ...

  6. unable to find valid certification path to requested target

    Error : javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu ...

  7. [ASP.NET]以iTextSharp手绘表格并产生PDF下载

    原文 [ASP.NET]以iTextSharp手繪表格並產生PDF下載 大家使用iTextSharp的機緣都不太一樣, 由於單位Crystal Report的License數量有限主管要我去找一個免費 ...

  8. Blend4精选案例图解教程(二):找张图片玩特效

    原文:Blend4精选案例图解教程(二):找张图片玩特效 Blend中的特效给了我们在处理资源时更多的想象空间,合理地运用特效往往会得到梦幻般效果,本次教程展示对图片应用特效的常规操作,当然特效不仅限 ...

  9. "Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network" 解读

    简介:这是一篇17年的CVPR,作者提出使用现有的人脸识别深度神经网络Resnet101来得到一个具有鲁棒性的人脸模型. 原文链接:https://www.researchgate.net/publi ...

  10. 将Android Studio默认布局ConstraintLayout切换成LinearLayout

    将Android Studio默认布局ConstraintLayout切换成LinearLayout     大部分人初次使用google android 扁平化布局ConstraintLayout都 ...