我试图调试我用gdb编写的服务器,因为它在非常特殊和罕见的条件下发生了段错误。 (通过安静模式或批处理模式?),跟随孩子(因为我的服务器是一个守护进程并从主PID分离),并自动转储核心和回溯(到一个指定的文件)一旦程序崩溃?如何在后台对守护进程运行gdb?
回答
为什么不只是运行过程交互在持久屏幕会话?调试时为什么它必须是守护进程?或者在屏幕会话中运行gdb,并在分支后将其附加到正在运行的进程(例如gdb/path/to/binary -p PID_of_binary)。
这实际上是一个好主意,不知道为什么我没有想到这一点:P感谢基础解决方案! – 2010-01-13 03:09:37
+1用于tmux而不是屏幕 – lkraav 2011-01-13 16:24:35
我不是一个真正的gdb的专家,但两件事情浮现在脑海
- Tracepoints作为程序运行它可能给你必要的信息或
- 使用gdb的remote debugging facility调试程序,而它的运行作为守护进程。
How to generate a stacktrace when my gcc C++ app crashes这个问题的答案应该做你想做的。 (假设你可以对你的代码进行修改)
首先,我会设置你的shell /环境给你一个核心转储。在bash:
ulimit -c unlimited
一旦你拥有了核心转储,您可以使用gdb来检查堆栈跟踪:
gdb /path/to/app /path/to/core/file
请注意,拥有核心文件与在调试器下停止相同的进程不是一回事。核心文件不保留有关打开文件描述符或内存映射状态的信息。所以这并不总是一个有用的建议。 – 2010-01-12 19:22:11
你不能调用程序中定义的函数。 – 2010-01-12 19:36:10
假设你有适当的权限,你可以让gdb连接到任何进程。与附加命令的gdb内
gdb /path/to/binary _pid_
或:你可以做它的命令行
attach _pid_
所以,一旦你的后台程序已经启动,您可以使用这些技术来连接到守护进程运行的最终PID。连接gdb会停止正在跟踪的进程,因此您需要发出“继续”来重新启动它。
我不知道直接的方式让gdb在程序崩溃时运行任意命令。以下是我能想到的一种解决方法:
- 创建并注册SIGSEGV的信号处理程序。
- 告诉gdb不要停在该信号上(
handle SIGSEGV nostop
) - 在信号处理程序的第一行设置一个断点。
- 分配commands to the breakpoint从第3步
你可能想看看桑巴如何促进调试;它有一个可配置的"panic action",可以挂起应用程序,通知开发者,产卵gdb等,并作为其信号处理程序的一部分运行。请参阅Samba源树中的lib/util/fault.c。
- 1. 如何在后台运行play framework 2.5(作为守护进程)?
- 2. Sendmail在后台运行一个smtp服务器(守护进程)?
- 3. Python的守护进程不会在Ubuntu后台运行
- 4. 使用gdb调试正在运行的守护进程
- 5. 如何运行docker守护进程?
- 6. python守护进程线程退出但进程仍在后台运行
- 7. Python:在Windows7中运行守护进程
- 8. 在C中的后台进程(守护进程)不execvp()-ing
- 9. Docker - 如何将mongodb进程作为守护进程运行
- 10. 通过rsh运行守护进程
- 11. 运行web.py作为守护进程
- 12. 将SBT作为守护进程运行
- 13. 可以在前台运行`mongod`,但不能作为守护进程运行
- 14. Python多线程:如何让守护进程线程运行
- 15. 如何在后台作为守护程序运行的Symfony2命令
- 16. 如何查看gradle守护进程是否正在运行?
- 17. 如何检查Hadoop守护进程是否正在运行?
- 18. 如何在守护进程模式下运行Warp?
- 19. 如何在Windows上运行Apache Ignite作为守护进程
- 20. 如何确保只有一个守护进程正在运行?
- 21. 守护进程,使程序在python/wx.python的后台工作
- 22. 如何在后台运行进程? c#
- 23. 在后台运行进程
- 24. 守护进程软件在后台更新mysql数据库
- 25. Fedora如何自动运行ssh守护进程
- 26. 如何从NSApplication运行launchd agent /守护进程?
- 27. 如何捕获从init.d运行的Linux守护进程的pid
- 28. 如何将sbt作为守护进程运行?
- 29. 我如何确保狮身人面像守护进程运行?
- 30. 守护进程模式下的chef-client如何运行
http:// stackoverflow。com/questions/17965/generate-a-core-dump-in-linux关于生成核心转储的SO帖子 – 2010-01-12 17:14:07
@HassanSyed:http://vmlinux.org/jocke/mirror/www.objsw.com/docs/gdb_22.html是一个死链接。 – bgoodr 2015-12-19 20:21:15