Ubuntu 18.04下Fortran程序出现segmentation fault无core文件生成如何解决
Ubuntu 18.04 Fortran程序段错误无core文件排查方案
核心原因排查项
- 检查程序运行的工作目录写入权限
你配置的core_pattern为相对路径core,会生成在程序启动时的工作目录下,先进入对应目录执行touch test_file验证是否有写入权限,无权限则先调整目录权限,也可以直接将core存储路径改为公共可写目录:echo "/tmp/core_%e_%p" > /proc/sys/kernel/core_pattern - 验证ulimit配置的生效范围
ulimit -c unlimited是会话级配置,仅在当前执行命令的终端生效,若你在其他终端启动程序、或是用sudo启动程序,配置会失效。sudo启动时需携带ulimit配置:
如需全局生效,可编辑sudo sh -c "ulimit -c unlimited && ./LPDM_gnu_omp"/etc/security/limits.conf添加如下两行,重启终端后生效:* soft core unlimited * hard core unlimited - 关闭apport服务拦截
Ubuntu默认的apport崩溃上报服务会拦截core文件生成,执行如下命令关闭后再测试:systemctl stop apport - 调整suid_dumpable内核参数
执行sysctl fs.suid_dumpable查看参数值,若为0则会限制特殊权限程序生成core,改为1即可:sysctl -w fs.suid_dumpable=1 - 调整栈大小限制
你的ulimit配置中栈大小仅为8M,Fortran OpenMP程序极易出现栈溢出触发段错误,栈溢出时可能会破坏core生成的执行逻辑,先调大栈大小再测试:ulimit -s unlimited
临时替代方案
你当前用gdb启动程序直接触发段错误,无需等待core文件生成,在gdb触发段错误后直接执行bt命令即可打印完整调用栈,直接定位崩溃位置。
内容的提问来源于stack exchange,提问作者yufei159
相关产品推荐
相关产品推荐

