- 论坛徽章:
- 0
|
由于服务器被重装,导致原来开发环境没了,现在重新安装gcc后,发现编译出来的程序不能运行,老是会core,使用gdb调试,发现类成员静态变量赋值的时候core掉,
根据调试信息,类静态变量好像没被初始化(实际代码中有初始化的),_M_p = 0x0,导致赋值的时候core掉,在linux和solaris下都能正常使用的,就是在aix下有问题。
我试了aix下gcc的好几个版本(rpm包和二进制包都试过,gcc.4.1.1.tar.Z、gcc-3.3.2、gcc-4.0.0、gcc-4.2.0),都是有这个问题,不知哪位有没碰到过,
之前服务器部署开发环境的时候也碰到过(06年),问当时的同事,只知道说好像是换了gcc版本解决的,现在也不知道具体是什么版本了。
操作系统版本:aix5.3
gdb调试core文件信息
(gdb) bt
#0 0xd0345860 in fetch_and_addlp () from /usr/lib/libc.a(shr.o)
#1 0x201be6b0 in __gnu_cxx::__exchange_and_add(int volatile*, int) (__mem=
findvar.c:706: internal-error: value_from_register: Value not stored anywhere!
A problem internal to GDB has been detected,
further debugging may prove unreliable.
使用gdb单步调试在下面这句赋值core掉
m_strConfigFile = "*****";
(gdb) print m_strConfigFile
$1 = {static npos = <optimized out>,
_M_dataplus = {<allocator<char>> = {<new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x0}}
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0xd0345860 in fetch_and_addlp () from /usr/lib/libc.a(shr.o) |
|