当Daemon实际上没有在平台上运行时(我们的路由器),我们是否可以将守护进程的所有数据结构转储为核心文件(或任何gdb兼容文件)以进行离线分析/调试。如果是这样,我们怎么能抛弃它。
编程语言:C
答案 0 :(得分:0)
如果将gdb附加到正在运行的进程gdb -p <pid>
,则可以使用gdb命令generate-core-file
写出标准核心文件。
稍后,当守护程序停止时,您可以使用gdb -c <core-file> <daemon-binary>
进行调试。
答案 1 :(得分:0)
另一种选择是对gdb进程使用gcore命令。它可以用作gcore <pid>
或gcore pgrep <appname>
。这将生成格式为core.pid
的coredump,其可以由gdb读取并调试。命令gcore -s
可以在收集核心映像时停止进程,并在完成后恢复(这是推荐的方法)。 gcore的优点是,您可以获取进程及其状态的内存映像,而不会终止进程。
如果是多进程应用程序,如果以相同的名称保存,则coredump可能会被覆盖,因此请确保使用sysctl -w kernel.core_pattern=/tmp/core_%p_%e
,以便核心转储可以使用进程ID和应用程序(可执行文件)进行跟踪。
就守护程序核心而言,这是一个很好的链接 - http://www.bonsai.com/wiki/howtos/debugging/daemon_core/