Linux
在不停止程序的情況下擷取和記錄 GDB 回溯
首先,簡要描述一下情況:一台電腦隱藏在某種畫廊的顯示器附近,充當了一件作品的無聲主力。儘管它的程序員有最好的意圖,但這件作品可能會不時崩潰,這取決於路人與顯示器的互動。由於正常執行時間(或類似的東西)非常寶貴,程序員已經安裝了電腦以使用 bash 循環自動重啟相關程序。
開發人員很想確定任何崩潰的原因是什麼,但通過 GDB 執行程序——據開發人員所知——將導致程序在崩潰時停止。這確實使開發人員能夠利用“回溯”並找到原因,但是在開發人員前往相關畫廊進行檢查之前,該作品將無法操作。這不好。
這個勇敢的開發人員如何通過 GDB 保護每次崩潰的回溯(並可能將它們儲存在某個地方),但仍然允許在崩潰時自動重新啟動程序的原始行為?
在啟動程序之前執行
ulimit -c 1073741824
。下次程序崩潰時,將在工作目錄(名為core.<PID>
)中創建核心轉儲。然後,您可以隨時使用 GDB 打開此核心。
ulimit -c XXXXX
設置程序段故障時創建的核心轉儲文件的最大大小。預設情況下,0
這意味著不轉儲核心。