主要观点:核心转储在调试异常退出的程序中起关键作用,可保存程序失败时的状态以帮助程序员查看和识别失败原因,文中通过在 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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。