我正在開發一個作爲守護程序運行的高流量網絡C服務器應用程序。在某些情況下,應用程序崩潰(始終沒有核心)。我如何使用gdb調試正在運行的守護進程以找到生成SIGSEGV的地方?使用gdb調試正在運行的守護進程
解釋性說明:
我知道如何使用gdb來連接到使用附加命令
連接到過程後正在運行的進程,它停止。如果我運行然後「繼續」,如果程序沒有崩潰,gdb仍然被阻塞。如果我按CTRL-C,進程正在退出,我無法簡單地分離gdb。
所以問題是:有沒有辦法繼續進程沒有被卡住的gdb,但能夠分離如果進程沒有崩潰?
您是否嘗試過改變coredump設置與例如'ulimit'命令?和/或運行調試版本?或者可能添加更多日誌記錄來縮小可能的崩潰位置? – 2013-04-23 12:16:00
我試過所有的可能性。 該進程在Ubuntu服務器上作爲新貴服務運行,並在服務啓動時被setuid-ed給某個用戶。 limits.conf包含該用戶的nofile和core的無限值。 我在/etc/sysctl.conf中設置了fs.suid_dumpable和kernel.core_uses_pid 我添加了更多的日誌記錄,但是它是一個高流量的服務器,它會產生太多的輸出。 – 2013-04-23 12:19:06