Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux strace 指令實戰:追蹤系統呼叫快速診斷疑難雜症

編輯:Linux 教學

strace 顯示使用者空間程式發出的所有系統呼叫、參數與回傳值,是除錯利器。常用參數:-f 追蹤子行程、-o file 輸出至檔案、-e 系統呼叫 過濾特定呼叫(如 -e execve)。

三大實戰案例

案例一:clint 執行 Segmentation Fault

truss -f -o clint.truss clint → 尾端顯示 stat("/root/.clint/plugins") ERR#2 'No such file or directory' → 建立缺失目錄 mkdir -p /root/.clint/plugins → 再追蹤發現仍缺 python 子目錄 → 全部建立後正常執行。

案例二:vim 啟動緩慢

truss -f -D -o vim.truss vim(-D 顯示相對時間戳)→ 發現 connect(AF_INET 10.57.18.27:6000) 連線失敗 → nanosleep 睡 1 秒重試 → 循環十餘次 → 原因是 DISPLAY 環境變數指向遠端 X Server → 註解 .cshrc 中 setenv DISPLAY ${REMOTEHOST}:0 解決。

案例三:已知檔案描述符 fd 反查完整路徑

無 API 直接查詢。靈感來自 lsof:strace -o lsof.strace lsof -p PID → 搜尋 /tmp/foo 發現 readlink("/proc/PID/fd/3", "/tmp/foo") → /proc/PID/fd/ 下每個 fd 皆為指向實際檔案的符號連結 → 程式碼實作:
snprintf(buf, "/proc/%i/fd/%i", pid, fd); readlink(buf, pathname, n);

注意

FreeBSD 5+ 預設未掛載 procfs,需 mount -t procfs proc /proc 或修改 /etc/fstab。

Copyright © Windows教程網 All Rights Reserved