尝试异步模式并" 继续& ":
保存下面的非stop.gdb
set target-async on
set pagination off
set non-stop on
Run Code Online (Sandbox Code Playgroud)
然后运行:
$ gdb -x non-top.gdb
(gdb) !pgrep YOUR-DAEMON
1234
(gdb) attach 1234
(gdb) continue -a &
(gdb)
Run Code Online (Sandbox Code Playgroud)
此页面附加/分离表示该detach命令可以在gdb.
如果您想捕获应用程序中的分段错误,则必须从调试器运行该应用程序。然后,当捕获到信号时,您可以使用where或bt 查看应用程序的堆栈跟踪。当然,应用程序出现故障后就无法继续使用,那么如何恢复呢?如果您希望很快触发故障,则可以附加到正在运行的进程并再次在调试器中等待故障。
如果您想要在故障发生后进行堆栈跟踪,那么您确实需要一个核心文件,因为不会附加任何进程。现在,如果您的守护进程作为系统的一部分启动,则可能很难获得转储核心的配置,而且您可能不希望其他应用程序在各处留下核心转储。因此,我建议停止系统守护进程并在用户空间中重新启动它,然后您可以允许它转储核心。如果确实有必要将其作为系统的一部分启动,则查看守护进程的启动是否仅限于单个子 shell,并ulimit -c在该子 shell 中使用来为核心转储设置适当的最大大小。