我正在开发一个作为守护程序运行的高流量网络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