我正在調試OSX上的一個shell腳本,中間有神祕的segfault。如果在腳本之外執行,則有問題的命令不會發生段錯誤。是否可以配置GDB,以便在正常程序終止時自動退出?
所以我需要以附加GDB的腳本運行所有程序,所以我可以調試此段錯誤。是否可以配置GDB,這樣它將運行程序並退出程序正確終止?我曾嘗試下面的代碼:
echo file ifconfig > gdbcfg
echo run >> gdbcfg
echo quit >> gdbcfg
gdb -x gdbcfg
但這不是工作,因爲GDB嘗試應用正常終止:(前執行quit
命令是否有可能以某種方式指示GDB等待應用程序正常終止,之後退出。 ?
也許我的做法是太情結,它只是一些GDB標誌像「加載和運行該應用程序,退出如果一切正常」?
我用nix工具鏈不太好,所以這個方法在技術上對我很難,問題太多。我不知道如何讓shell腳本在第一段錯誤後停止(以及第一段後面的段錯誤在哪裏)。我不知道如何正確地轉儲核心並將其加載回GDB。所以我認爲就在每個應用程序開始之前,在shell腳本中,並打入GDB將是最簡單的解決方案:)。 – grigoryvp 2012-03-13 16:44:43
ulimit -c unlimited將強制崩潰進程轉儲名爲「core」的核心文件。你可以讓你的腳本在每個命令後檢查「核心」文件,如果存在則退出(如果[-f core];然後退出; fi)退出。然後運行gdb,第一個參數是崩潰的進程,第二個參數是核心文件名(「core」)。就這樣。 – strkol 2012-03-13 16:56:34