免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4962 | 回复: 2
打印 上一主题 下一主题

AIX平台多线程C++程序抛出异常导致崩溃得问题,附崩溃堆栈信息,帮忙出出主意 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-22 20:49 |只看该作者 |倒序浏览
刚刚接触
AIX5.3系统,需要把原来得程序移植到该系统下, 编译环境如下:
thead model: aix
gcc version 4.2.0

//代码逻辑是多线程得程序, 发现线程内函数抛出异常会导致主程序崩溃得现象, 代码大概如下:

//异常类
class MyException
{public:
        MyException(){}
        virtual ~MyException(){};
};

//某个会抛出异常得函数
void gTest()
{
      throw MyException();
}

//线程函数体
void *thd_func(void *ptr)
{
     int i = 0;
     while (i++ < 1000) //当循环多次执行时会导致崩溃IOT/Abort trap (core dumped)
    {
        try { gTest();}
        catch(MyException const & ex)
        {
              cout << "exception caught" << endl;
              continue;
        }
    }
    return NULL;
}

//发现主线程在启动多个(2-5个)线程后会导致运行一段时间会崩溃IOT/Abort trap (core dumped)

//gdb调试崩溃得堆栈信息如下:
terminate called after throwing an instance of 'MyException'

Program received signal SIGABRT, Aborted.
0xd01246b4 in pthread_kill () from /usr/lib/libpthread.a(shr_xpg5.o)
#0  0xd01246b4 in pthread_kill () from /usr/lib/libpthread.a(shr_xpg5.o)
#1  0xd0124128 in _p_raise () from /usr/lib/libpthread.a(shr_xpg5.o)
#2  0xd0355b2c in raise () from /usr/lib/libc.a(shr.o)
#3  0xd03b3e7c in abort () from /usr/lib/libc.a(shr.o)
#4  0xd213f704 in __gnu_cxx::__verbose_terminate_handler() ()
   from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#5  0xd214801c in __cxxabiv1::__terminate(void (*)()) ()
   from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#6  0xd213f57c in std::terminate() ()
   from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#7  0xd2147e58 in __cxa_throw ()
   from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#8  0x10001000 in gTest() ()

//是不是我异常测试得代码有问题? 或者stdc++库异常不是线程安全得?

[ 本帖最后由 bittertea 于 2009-2-22 20:54 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-22 20:52 |只看该作者
线程库链接选项是 -lpthread

论坛徽章:
0
3 [报告]
发表于 2009-02-24 11:54 |只看该作者
原因找到了, 默认链接了一份非线程安全得stdc++动态库:
默认得是
/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a
改为链接
/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/pthread/libstdc++.a
就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP