[Erl_Question18]教練!又發現Erlang Shell裡面的神奇函數一隻

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   io   strong   檔案   

 人嘛,總是想提高效率,創造更多的價值,同時也得到更多的選擇空間。可一個人的精力,時間終歸是有限的,減少自身重複或無意義工作就顯得格外重要!要麼懂得授權,要麼把重複的工作交給機器來做:現實: 美國人喜歡把不重要的開發外包給其它國家,自己做核心;身邊:上級們不都是把他們認為不值得親自做的事派發給下級,自己留精力去琢磨更重要的事嗎? 但苦逼如我,根本木有授權,所以只好費勁心思想盡辦法讓機器來做。 所以我先從工作調試用得最多的就是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} | errorc(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() -> okni() -> 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} | errornc(File, Options) -> {ok, Module} | error Types:File = file:name()Options = [Option] | OptionOption = compile:option()Module = module()
compile:file(File, Options ++ [report_errors, report_warnings]) 然後載入到所有的節點上!!! 14.
nl(Module) -> abcast | error
將指定模組載入到所有已串連的節點. 15.
regs() -> oknregs() -> 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). 
用上這個後,感覺爽多了。 
 如果你發現什麼神奇的函數,也歡迎在這裡分享哇!
 既使腳再短,也要義無反顧陪你一起翻山越嶺~~~~~~~~ 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.