- 首先遇到这个问题时,系统提供的信息很少。
- 各种问题的可能行都会导致这种问题,如野指针,动态链接库等原因
下面讲述在linux系统下面如果调试这个问题,并找出现该问题的原因
- 系统已经安装了
gdb
- 如果使用
QT Creator
,先编译运行,报错之后,用命令行进入项目目录,执行完之后系统会自动在目录里面生成一个core*
文件,可以用ls core*
查询,接着使用gdb exefile core
进行调试(exefile是make
之后的可执行文件,core
文件是当前报错之后系统抛出来的文件)。 - 如果你使用命令行进行
qmake 和 make
,请保证QT Creator
的qmake 和make
版本和命令行的一致。
注意:系统默认core文件的大小为0,如果在项目的目录没有产生core
文件,则需要用ulimit
命令查看和修改core文件的大小。使用ulimit -a
查看大小,使用 ulimit -c unlimited
设置core文件不做限制。
以我的代码为例:
- 其中
Map3DWork
是可执行文件,当运行该文件时出现一下的问:
-
首先查看core文件大小,如果是0则使用
ulimit -c unlimited
设置一下。我的已经设置过了:
-
因为我的core文件大小设置成不受限制的,所以上上步运行
Map3DWork
时候已经生成了core文件,用ls core*
查询得到: -
接着使用
gdb Map3DWork core
,然后输入r
再接着输入bt
进行调试,可以看到导致问题出现的原因了