cc1plus触发internal compiler error: Segmentation fault问题排查咨询
cc1plus段错误问题咨询
编译时cc1plus崩溃并抛出错误:internal compiler error: Segmentation fault。主机内存充足,但仍出现该问题,重启系统后编译可正常通过,因此认为并非g++自身bug。
主机信息
$ gcc --version gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ free -m total used free shared buff/cache available Mem: 62137 3275 55193 1608 3668 56460 Swap: 975 401 574 $ dmesg [55342.444777] cc1plus[22036]: segfault at 3f5a5cfa6e70 ip 0000000000df4cff sp 00007ffe92d48d60 error 4 in cc1plus[400000+180d000] [55342.444789] Code: 18 85 f6 0f 88 c1 48 7b ff 83 fe 01 48 89 fb 0f 85 03 48 7b ff 48 85 ff 74 16 8b 57 04 85 d2 74 0f 48 8b 47 18 48 85 c0 74 06 <66> 83 38 03 74 0b 48 83 c4 18 48 89 d8 5b 5d c3 90 83 ea 01 48 63 [57864.997815] ThreadPoolForeg[33416]: segfault at 5549025e409e ip 000055fbf82d388c sp 00007fdd27be01b0 error 4 in code[55fbf6543000+70a6000] [57864.997826] Code: 01 48 8b 5d b0 4c 89 ad a8 fe ff ff 4c 89 e8 0f b7 48 02 ff c9 66 89 48 02 0f b7 c9 48 c1 e1 04 48 8b 74 08 10 48 8b 44 08 18 <0f> b7 4e fe 66 83 f9 01 77 14 48 8d 4e f8 48 81 e1 00 00 fe ff 48 [57886.041612] traps: make[34363] general protection fault ip:55b6bc81e9b3 sp:7ffffd12f7f0 error:0 in make[55b6bc800000+34000] $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
问题解答
1. g++是否存在限制内存使用的配置项?
- g++本身没有直接限制内存使用的配置项,但可通过系统工具间接限制,比如
ulimit命令。从你的内存数据看,可用内存充足,大概率不是这个原因。 - 部分编译选项会影响内存占用,比如
-O3优化级别比-O0消耗更多内存,但这是编译特性,不属于主动限制内存的配置。 - 系统OOM Killer触发也会导致进程崩溃,但你的
dmesg日志中没有相关记录,可以排除这种情况。
2. 如何调试g++的段错误问题?
- 生成核心转储文件:执行
ulimit -c unlimited开启核心转储,再次触发编译崩溃后,用gdb cc1plus core加载核心文件,输入bt命令查看调用栈,定位崩溃位置。 - 启用g++调试日志:编译时添加
-v选项查看cc1plus启动参数,或用-save-temps保存临时文件,缩小问题范围,尝试单独编译出错的源文件。 - 排查环境干扰:由于重启后编译正常,怀疑是系统资源冲突或进程状态异常。可通过
top/htop查看编译时系统负载,清理临时文件后重新编译,或使用单线程编译(make -j1)排除多线程竞争问题。 - 升级g++版本:当前使用的gcc 7.5.0版本较旧,即便你认为不是g++自身bug,旧版本可能存在已修复的偶发性问题,升级到Ubuntu 18.04支持的gcc 8/9版本可验证是否解决问题。
内容的提问来源于stack exchange,提问作者Leapfrog
相关产品推荐
相关产品推荐

