MST
星途 面试题库

面试题:C语言Linux进程异常退出时获取核心转储文件并分析

假设在Linux系统中,一个用C语言编写的进程发生异常退出,且系统配置了生成核心转储文件(core dump)。请描述如何设置让系统生成核心转储文件,以及怎样使用gdb工具加载核心转储文件来分析进程异常退出前的状态和原因。
24.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

设置生成核心转储文件

  1. ulimit设置:在终端中执行 ulimit -c unlimited 命令,此命令用于将核心转储文件的大小限制设置为无限制。如果不设置此限制,可能因为文件大小限制而无法生成完整的核心转储文件。

  2. sysctl设置:编辑 /etc/sysctl.conf 文件,添加或修改 kernel.core_pattern = /path/to/corefile-%e-%p-%t 。这里 /path/to/ 是你希望存储核心转储文件的路径,%e 代表可执行文件名,%p 代表进程ID,%t 代表转储时间。修改完成后执行 sysctl -p 使设置生效。此步骤确保核心转储文件按指定的命名规则和路径生成。

使用gdb工具加载核心转储文件分析

  1. 启动gdb:假设你的可执行文件名为 my_program,核心转储文件名为 corefile-my_program-1234-1620000000(其中1234为进程ID,1620000000为转储时间),在终端执行 gdb my_program corefile-my_program-1234-1620000000。gdb会加载可执行文件和核心转储文件。

  2. 分析异常原因

    • 查看栈回溯:执行 bt 命令,gdb会显示函数调用栈信息。通过栈回溯可以看到进程在异常退出前执行到了哪些函数,帮助定位问题发生的代码位置。
    • 查看寄存器状态:执行 info registers 命令,可查看各个寄存器的值。寄存器状态能反映进程异常退出时的CPU执行状态,对分析问题有重要参考价值。
    • 查看变量值:使用 print 命令,如 print variable_name,可以查看指定变量在进程异常退出前的值,有助于理解程序当时的运行状态。