zoukankan      html  css  js  c++  java
  • [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只

     
    人嘛,总是想提高效率,创造更多的价值,同时也得到更多的选择空间。可一个人的精力,时间终归是有限的,减少自身重复或无意义工作就显得格外重要!
    要么懂得授权,要么把重复的工作交给机器来做:
    现实: 美国人喜欢把不重要的开发外包给其它国家,自己做核心;
    身边:上级们不都是把他们认为不值得亲自做的事派发给下级,自己留精力去琢磨更重要的事么?
     
    但苦逼如我,根本木有授权,所以只好费劲心思想尽办法让机器来做。
     
    所以我先从工作调试用得最多的就是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).
     
    用上这个后,感觉爽多了。
     

     
    如果你发现什么神奇的函数,也欢迎在这里分享哇!

     
    既使脚再短,也要义无反顾陪你一起翻山越岭~~~~~~~~
     
  • 相关阅读:
    CentOS7.6配置ip
    查看当前用户下没有主键也没有唯一性索引的表
    C++ 开机自动启动
    C++ 判断是文件还是文件夹
    Duilib热键
    c++将字符转换成字符串
    duilib中各控件响应的消息类型
    Duilib程序添加托盘图标显示
    C++打开文件夹
    C++获取驱动盘句柄
  • 原文地址:https://www.cnblogs.com/zhongwencool/p/erlang_c_erl.html
Copyright © 2011-2022 走看看