主要观点:核心转储在调试异常退出的程序中起关键作用,可保存程序失败时的状态以帮助程序员查看和识别失败原因,文中通过在 Linux 中逐步演示启用、创建和检查核心转储的过程,并涉及高端调试工具和技术。
关键信息:
- 可在
/etc/security/limits.conf和/etc/sysctl.conf中设置使核心转储持久化,配置转储位置等。 - 可通过创建导致段错误的 C 程序来生成测试用的核心转储,如
gcc -g -o crash_test crash_test.c。 - 利用 GDB 可加载和分析核心转储,进行回溯、检查变量、反汇编代码、查看寄存器等操作。
 - 对于多线程应用,可使用
info threads等命令进行线程相关操作。 - 还可使用 Valgrind 分析内存问题,ELFutils 进行符号检查,Crash Utility 处理内核转储等高级工具。
 - 给出了调试特定问题如段错误、堆损坏、共享库不匹配等的方法。
 - 总结了核心转储调试的最佳实践,包括保存符号、自动化转储、分析日志等。
重要细节: - 启用核心转储时,
ulimit -c unlimited可临时启用,* soft core unlimited等可使其持久化,sudo sysctl -w kernel.core_pattern=/var/dumps/core.%e.%p可配置转储位置。 - 生成核心转储后,可通过
ls /var/dumps查看其位置,如core.crash_test.12345。 - 在 GDB 中,
bt可获取回溯,info locals可检查变量,disassemble main可反汇编代码,info registers可查看寄存器等。 - 调试多线程应用时,
info threads可查看线程,thread <ID>可切换线程,thread apply all bt可获取所有线程的回溯。 - Valgrind 可检测无效内存访问等问题,
eu-readelf可检查核心文件的符号信息等。 - 最佳实践包括独立保存符号、自动化转储、分析日志、去除敏感信息、使用调试构建等。
 
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。