在日常代码的调试中,经常遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能。今天就来介绍一下利用core dump文件和gdb做应用程序调试和追踪的方法。
1. core dump 文件
在linux下当应用程序发生异常中止退出或者发生崩溃的时候,linux内核会将应用程序在这段运行期间的内存状态等相关信息转存到磁盘,以供系统故障排查或者调试。这个转存的文件叫core dump文件。core dump文件中会记录程序当时的内存调用、堆栈引用、进程和线程调用等信息,可以帮助开发人员和维护人员了解异常发生当时的环境参数和信息,所以core dump对故障排查和bug调试具有重大的意义。在Linux下,我们需要配置相关参数让系统生成core dump 文件,相关指令如下:
ulimit -c unlimited
运行 ulimit -c 命令设置生成core dump文件的最大值,系统默认为0,unlimited参数设置为生成文件大小无限制。
echo "/home/root/log/core_%e_%p_%t" > /proc/sys/kernel/core_pattern
设置core dump文件的生成位置,本次指向系统的 /home/root/log/ 目录下。
运行gcc或g++编译器进行代码,需要携带 -g 参数告诉编译器在编译程序时加入调试信息。
2. GDB调试命令
标准的GDB具有以下调试命令:
break:设置断点,右面可以跟<函数名>,<行号>, <文件名:行号&g