我做了一個C程序,會拋出分段錯誤錯誤,每當我運行它。然後我做了一個bash腳本如下:如何在bash中檢查程序的運行時錯誤?
cat input.txt | ./a.out 1> output.txt 2> error.txt
cat error.txt
第二行的輸出應該是類似分段錯誤(核心轉儲) 但是,相反它是一個空白文件。
如何捕獲C程序的運行時錯誤?
我做了一個C程序,會拋出分段錯誤錯誤,每當我運行它。然後我做了一個bash腳本如下:如何在bash中檢查程序的運行時錯誤?
cat input.txt | ./a.out 1> output.txt 2> error.txt
cat error.txt
第二行的輸出應該是類似分段錯誤(核心轉儲) 但是,相反它是一個空白文件。
如何捕獲C程序的運行時錯誤?
您的問題,從一個事實,即Segmentation fault (core dumped)
消息不你的程序產生莖,它是由外殼中,你可以在a.out
命令生成。該過程看起來大約是這樣的:
SIGSEGV
信號wait()
系統調用表示您的程序由於SIGSEGV
信號而異常退出。這在一定程度上更詳細地討論this answer。
如果你想捕獲該輸出,你可以嘗試這樣的:
$ sh -c 'trap "" 11; ./a.out' 1> output.txt 2> error.txt
$ cat error.txt
Segmentation fault (core dumped)
這將在一個子進程運行代碼,並將由殼抑制段錯誤的默認處理。
管道和stderr重定向操作符的運算符優先級是什麼? – Dai
@戴,對不起,我沒有得到你的問題。你能簡化它嗎? – dannyBoy
避免不必要地使用'cat'(例如'./a.out output.txt 2> error.txt' –