在使用g++编译运行cpp文件,执行编译得到的可执行文件时,可能会出现段错误(segmentation fault),比如出现以下提示:
./ex.exe
[1] 7565 segmentation fault (core dumped) ./ex.exe
(此处ex.exe是可执行文件的名字)
但除此之外就不会有更多信息了,所以我们需要一些简单的方法来找出问题出在哪一行代码。
对于Ubuntu系统来说,可能默认在段错误出现时不生成core文件。可以查看当前默认生成的core文件最大字节,命令为 ulimit -c
ulimit -c
0
将其最大字节改成不限:
ulimit -c unlimited
这样再执行原来的可执行文件时,就可以发现目录文件下出现了一个core 文件。
可以用命令 file core来看该core文件是由哪个可执行文件生成的。
有了core文件,就可以用调试工具gdb来查看了,前提是在编译命令的后面加一个参数 -g
通过gdb来查看,命令为
gdb ./ex.exe ./core
可以直接输入where,查看出现错误的地方。
注意如果有多个错误信息,需要从下向上看,因为此处是一个栈。