2012-01-09 58 views
0

我有C++軟件(服務器)和它的崩潰,我不知道確切的 問題是基於日誌。我想做一些事情,在 崩潰或退出該過程後,我會通過這個 文件gdb轉儲過程中的Linux和分析什麼是做什麼不應該。gdb導入崩潰/退出過程中的進程轉儲?

任何人都在過去做點什麼? 有人可以幫助我瞭解一些信息或想法嗎?

謝謝!

回答

5

你想要的是一個定期的核心轉儲,它可以與GDB一起查找崩潰位置。 查看http://linux.die.net/man/5/core的信息。

如果守護進程在當前目錄所在的位置沒有寫權限,則不會生成內核。重定向它,嘗試;

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 
+0

如果你有你的守護程序的源代碼,以'-g -Wall編譯它們''gcc'編譯器的標誌是有幫助的。 – 2012-01-09 13:41:04

+0

@Basile Starynkevitch:這兩個標誌都存在於Makefile中 – Svisstack 2012-01-09 13:43:07

+0

然後獲取內核並使用'gdb/path/to/daemon core'進行調試 – 2012-01-09 13:43:57

1

您是否在尋找核心文件?在啓動您的守護程序腳本,添加此命令(假設解釋爲腳本是bash):

ulimit -c unlimited 

確立了核心文件,以「無限」(這通常是默認爲0)的最大尺寸。

+0

從技術上講,這不是一個守護進程,這是在屏幕上的控制檯應用程序,這使得區別?我已經設置爲無限這個,但沒有核心文件。 – Svisstack 2012-01-09 13:40:42

+0

如果您從控制檯運行,那麼只需在gdb中啓動即可。 – eduffy 2012-01-09 13:43:04

+0

不能,這個應用程序必須始終保持活着,它在bash中運行,而當它崩潰時,它會在我附加gdb時再次啓動,然後gdb不會讓進程死亡,直到我退出gdb,我無法承受任何方式 – Svisstack 2012-01-09 13:45:33

1

正如其他人回覆,你可以得到一個核心轉儲文件。一定要適當地配置你的環境。

另一種方式,一旦守護程序已經運行並且在崩潰之前,它就會通過調試器到attach

而且你還可以用gdb --args/路徑/到/守護守護論點啓動守護進程......

+0

謝謝,但不適用於我,我不能附加到此,因爲那麼崩潰後的進程將不會釋放綁定的端口和新的deamon不會開始取代其他和此應用程序必須始終保持活着。 – Svisstack 2012-01-09 14:02:55