?
strace是一個(gè)Linux系統下的命令行工具,用于跟蹤系統調用和信號,使用塞它可以實(shí)時(shí)監控進(jìn)(??ヮ?)?*:???程與(╬?益?)操作系統之間的查找交互,幫助我們找到程序運行過(guò)程中的動(dòng)阻問(wèn)(╯‵□′)╯題,通過(guò)strace,原因我們可以查看程序在執行過(guò)程中??(′?_?`)調用了哪些系統函數,以及這些函數的使用塞返回值等信息,這對于診斷程序阻塞的查找原因非常(◎_◎;)有幫助。
1、我們需要找到Emacs啟動(dòng)時(shí)調用的命令,可以通過(guò)以下命令查看Emacs的啟動(dòng)參數:
emacs --version
在輸出的信息中,可以找到Emacs的啟動(dòng)命令,/usr/bin/,這里的--batch表示以批處理模式啟動(dòng),-l表示加載一個(gè)配置文件,-f表示指定一個(gè)初始化文件。
2、我們可以使用strace命令跟蹤這個(gè)啟動(dòng)命令,假設我們的Emacs啟動(dòng)命令是/usr/bin/emacs --batch -l -f /p??at(′_ゝ`)h/to/your/init.el,那么我們可以使用以下(xia)命令跟蹤它:
strace -o emacs_trace.txt /usr/bin/emacs --batch -l -f /path/to/your/init.el
這里,-o emacs_trace.txt表示將跟蹤結果輸出到名為emacs_tr??ace.txt的文件中。
3、分析跟蹤結果,打開(kāi)emacs_trace.txt文件,查看其中的輸出信息,通常,我們會(huì )關(guān)注以下幾個(gè)方面的信ヾ(?■_■)ノ息:
系統調用:如打開(kāi)、關(guān)閉文件、socket連接等;
信號:如SIGCHLD??(子進(jìn)程終止)、SIGINT(中斷)等;
系統調用的返回值:如0表示成功,非0表示失敗。
通過(guò)分析這些信息,我們可以找出導致Emacs啟動(dòng)阻塞的原因,例如某個(gè)系統調用失敗、某個(gè)??(′▽?zhuān)?信號沒(méi)( ?▽?)有被正確處理等。
4、根據分析結果,修改Emacs的配置文件或初始化文件,解決問(wèn)題,然后再次嘗試啟動(dòng)Emacs,看是否還存在阻塞問(wèn)題,如果問(wèn)題解決,可以將相關(guān)代碼添加到??版本控制系統中,以便其他用戶(hù)在遇到類(lèi)似問(wèn)(╯°□°)╯題時(shí)能夠快速定位和解決。
1、如何查看strace(?Д?)的輸出結果?
答:可以使??用cat、less、more等命令查看strace的輸出結果。cat(′?_?`) emacs_trace.txt。
2、如何退出strace?
答:在strace命令后加上quit即可退出stra(′▽?zhuān)?)ce,strace -o emacs_trace.txt -q /usr/bin/emacs --batch -l -f /path/to/your??/init.el && quit,注意┐(′д`)┌,這里使用了&&來(lái)確(que)保在??完成跟蹤后再退出strace。
3、如何重播stra??c??e的輸出結果?
答:可以使用scriptreplay工具重播strace的輸出結果,首先安裝scriptreplay,然后使用以下命令重播輸出結果:
scriptreplay emacs_trace.txt <(╯‵□′)╯ /dev/null > output.txt
< /dev/null > output.txt表??示將輸出重定向到一個(gè)名為output.txt的文件中,如果想要實(shí)時(shí)查看輸出結果,可以將兩個(gè)重定向符號都改為>,并用管道符|連接,如下所示:
scriptreplay emacs_trace.txt | less -R -SFX "" -SFX "" -SFX "" -SFX "" -SFX "??;" -SFX &q??uot;" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX "&qu(?????)ot; -SFX "" -SFX "" -SFX "" -SFX "" -SFX "" -SFX ""( ?ヮ?); -SFX "&quo(°o°)t; -SFX "&┐(′?`)┌quot; -SFX "" -SFX "&q(′ω`*)uot; -SFX "" -SFX "ヾ(?■_■)ノ" -SFX "" -SFX "" -SFX "" -SFX "??&qu??ot; -SFX "" -SF??X "" -S( ?° ?? ?°)FX &q(′?ω?`)uot;" -SFX "" -SFX "" -SFX "" -SFX "" -S??FX "" -SFX "" -SFX "(′ω`)" -SFX "" -SFX "&quo??t; -SFX "" -SFX "" &> output.txt