QT ---程序异常结束调试 Segmentation fault (core dumped)

  • 首先遇到这个问题时,系统提供的信息很少。
  • 各种问题的可能行都会导致这种问题,如野指针,动态链接库等原因

下面讲述在linux系统下面如果调试这个问题,并找出现该问题的原因

  • 系统已经安装了gdb
  • 如果使用QT Creator,先编译运行,报错之后,用命令行进入项目目录,执行完之后系统会自动在目录里面生成一个core*文件,可以用ls core*查询,接着使用gdb exefile core进行调试(exefile是make之后的可执行文件,core文件是当前报错之后系统抛出来的文件)。
  • 如果你使用命令行进行qmake 和 make,请保证QT Creatorqmake 和make版本和命令行的一致。

注意:系统默认core文件的大小为0,如果在项目的目录没有产生core文件,则需要用ulimit命令查看和修改core文件的大小。使用ulimit -a查看大小,使用 ulimit -c unlimited设置core文件不做限制。

以我的代码为例:
image.png
  • 其中Map3DWork是可执行文件,当运行该文件时出现一下的问:
    image.png
  • 首先查看core文件大小,如果是0则使用ulimit -c unlimited设置一下。我的已经设置过了:

    image.png

  • 因为我的core文件大小设置成不受限制的,所以上上步运行Map3DWork时候已经生成了core文件,用ls core*查询得到:

    image.png

  • 接着使用gdb Map3DWork core,然后输入r 再接着输入 bt进行调试,可以看到导致问题出现的原因了

    image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使...
    随风化作雨阅读 47,316评论 2 15
  • 什么是coredump Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程...
    java菜阅读 4,289评论 0 4
  • 调试前准备 获取进程的内核转储(core dump) why:最大好处是,其保存了问题发生时的状态。记录进程当前状...
    Gitlusen阅读 974评论 0 2
  • 来自“星天使”的分享,我做文字整理。 4.土星回归你会经历什么? 首先,土星回归将到来多少挑战,取决于回归前每个人...
    Shirley雪丽阅读 8,034评论 0 8
  • 2017年4月2号早上现教看完天蓝色的彼岸. 活着真好,可以感受风温和吹到脸上~ 我会在该坚强的时候坚强~
    古月梅子阅读 179评论 0 0