转储模块的数据结构

时间:2014-06-02 09:18:56

标签: c data-structures gdb coredump

当Daemon实际上没有在平台上运行时(我们的路由器),我们是否可以将守护进程的所有数据结构转储为核心文件(或任何gdb兼容文件)以进行离线分析/调试。如果是这样,我们怎么能抛弃它。

编程语言:C

2 个答案:

答案 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/