我正在尝试使用gdb调试我写的服务器,因为它在非常特定且罕见的情况下会出现段错误。
是否有任何方法可以让gdb在后台运行(通过quiet或batch模式?),跟踪子进程(因为我的服务器是守护进程并从主PID中分离)并在程序崩溃时自动转储核心和回溯信息(到指定文件)?
我正在尝试使用gdb调试我写的服务器,因为它在非常特定且罕见的情况下会出现段错误。
是否有任何方法可以让gdb在后台运行(通过quiet或batch模式?),跟踪子进程(因为我的服务器是守护进程并从主PID中分离)并在程序崩溃时自动转储核心和回溯信息(到指定文件)?
假设您拥有适当的权限,您可以让gdb附加到任何进程。您可以通过命令行执行以下操作:
gdb /path/to/binary _pid_
或者使用gdb中的attach命令:
attach _pid_
一旦您的守护进程已启动,您可以使用以下任一技术来附加到最终运行的PID上。 附加gdb会停止您正在跟踪的进程,因此您需要发出“continue”命令以重新启动它。
我不知道如何直接让gdb在程序崩溃时运行任意命令。这是我能想到的一个解决方法:
handle SIGSEGV nostop
)首先,我会设置您的shell /环境以生成核心转储文件。在bash中:
ulimit -c unlimited
gdb /path/to/app /path/to/core/file