如何在后台运行gdb对守护进程?

Dav*_*nco 8 c++ unix linux debugging gdb

我正在尝试调试我用gdb编写的服务器,因为它在非常特殊和罕见的条件下进行了段错误.

有什么方法可以让gdb在后台运行(通过安静或批处理模式?),跟随子项(因为我的服务器是守护进程并从主PID中分离)并自动转储核心和回溯(到指定的文件) )一旦程序崩溃了?

R S*_*hko 8

假设您具有适当的权限,则可以将gdb附加到任何进程.您可以在命令行上执行以下操作:

gdb /path/to/binary _pid_
Run Code Online (Sandbox Code Playgroud)

或者使用attach命令从gdb中:

attach _pid_
Run Code Online (Sandbox Code Playgroud)

因此,一旦您的守护程序启动,您可以使用这些技术之一附加到您的守护程序运行的最终PID.附加gdb会停止正在跟踪的进程,因此您需要发出"continue"以重新启动它.

我不知道在程序崩溃时让gdb运行任意命令的直接方法.这是我能想到的一个解决方法:

  1. 为SIGSEGV创建并注册信号处理程序.
  2. 告诉gdb不要停止该信号(handle SIGSEGV nostop)
  3. 在信号处理程序的第一行设置断点.
  4. 从步骤3 为断点分配命令


And*_*oss 7

为什么不在持久性屏幕会话中以交互方式运行该过程?调试时为什么必须是守护进程?或者只是在屏幕会话中运行gdb并将其附加到正在运行的进程(例如gdb/path/to/binary -p PID_of_binary)之后.