调试Linux程序的时候,出现Segmentation Fault错误时可以使用core dump的机制来找出程序中出现的错误。
无论你是用Makefile来编译,还是直接在命令行手工输入命令来编译,都应该加上 -g 选项。
一般来说,在默认情况下,在程序崩溃时,core文件是不生成的(很多Linux发行版在默认时禁止生成核心文件)。所以,你必须修改这个默认选项,在命令行执行:
ulimit -c unlimited
表示不限制生成的core文件的大小。
可以临时开启这个机制,只需在命令行执行
ulimit -c unlimited
或者编辑
vi /etc/profile
增加或者修改 ulimit -c unlimited
运行你的程序,不管用什么方法,使之重现Segmentation Fault错误。
之后在程序的工作目录下会生成一个core文件
然后使用GDB调试
gdb ./test core
进入调试
(gdb) where
或者 bt
查看信息
查看core 是否开启
ulimit -c
关闭core
ulimit -c 0