標籤: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).
用上這個後,感覺爽多了。
如果你發現什麼神奇的函數,也歡迎在這裡分享哇!
既使腳再短,也要義無反顧陪你一起翻山越嶺~~~~~~~~