背景:Qt程序偶发性crash,偶发性原因不好查找,可以配合GDB查看coredump文件进行调试,找出发生异常的地方,但是Qt自带库有时无法查找。
程序运行前的准备,设置几个步骤,在程序crash时生成对应的coredump文件:
- shell中执行“echo 0 > /proc/sys/kernel/core_uses_pid”,用以控制生成的coredump文件名后缀格式,echo 1表示添加pid作为后缀,echo 0表示不添加pid作为后缀,保持coredump文件名。
- shell中执行"echo home/test/coredump > /proc/sys/kernel/core_pattern",用以控制生成的coredump文件保存的目录。
- shell中执行“ulimit -c unlimited”,用以取消生成的coredump文件大小,如果使用“ulimit -c (文件大小)”可以限制coredump的大小,但是会被裁减,不完整的文件不利于调试。
使用生成的文件进行调试:
- shell中执行“gdb execfile coredump”,其中execfile是发生carsh时对应的可执行文件。
- GDB中输入bt即可看到对应出问题的堆栈信息。