面试题答案
一键面试设置生成核心转储文件
-
ulimit设置:在终端中执行
ulimit -c unlimited
命令,此命令用于将核心转储文件的大小限制设置为无限制。如果不设置此限制,可能因为文件大小限制而无法生成完整的核心转储文件。 -
sysctl设置:编辑
/etc/sysctl.conf
文件,添加或修改kernel.core_pattern = /path/to/corefile-%e-%p-%t
。这里/path/to/
是你希望存储核心转储文件的路径,%e
代表可执行文件名,%p
代表进程ID,%t
代表转储时间。修改完成后执行sysctl -p
使设置生效。此步骤确保核心转储文件按指定的命名规则和路径生成。
使用gdb工具加载核心转储文件分析
-
启动gdb:假设你的可执行文件名为
my_program
,核心转储文件名为corefile-my_program-1234-1620000000
(其中1234为进程ID,1620000000为转储时间),在终端执行gdb my_program corefile-my_program-1234-1620000000
。gdb会加载可执行文件和核心转储文件。 -
分析异常原因:
- 查看栈回溯:执行
bt
命令,gdb会显示函数调用栈信息。通过栈回溯可以看到进程在异常退出前执行到了哪些函数,帮助定位问题发生的代码位置。 - 查看寄存器状态:执行
info registers
命令,可查看各个寄存器的值。寄存器状态能反映进程异常退出时的CPU执行状态,对分析问题有重要参考价值。 - 查看变量值:使用
print
命令,如print variable_name
,可以查看指定变量在进程异常退出前的值,有助于理解程序当时的运行状态。
- 查看栈回溯:执行