关于ACE在多CPU系统中运行core dump的问题

Cherishlin 2006-03-31 12:46:44
我的ACE程序代码,在单CPU系统中(windows、Solaris10)运行正常,但在两个CPU中,无论是windows还是Solaris中都会core dump,下面是Solaris10+gcc调用栈(windows调用栈基本与此一致)

#1 0xff1e50c4 in ACE_Configuration_Section_Key (this=0xfd679470, rhs=@0x4b924)
at Configuration.cpp:132
#2 0xff1e5268 in ACE_Configuration::expand_path (this=0x0, key=@0x4b924,
path_in=@0xfd679528, key_out=@0xfed67704, create=0) at Configuration.cpp:177
#3 0xff08c134 in TFC_System_Impl::getValue (this=0x478ec, path=0xff0ac0a8 "Log/Debug",
key=0xff0ac0b8 "LONGTIME", defaultValue=@0xfd6795d0) at System.cpp:214
#4 0xff08bfb0 in TFC_System_Impl::getIntegerValue (this=0x478ec,
path=0xff0ac0a8 "Log/Debug", key=0xff0ac0b8 "LONGTIME", defaultValue=3)
at System.cpp:247
#5 0xfeffb408 in ~TFC_TimeMeter (this=0xfd6797a0) at TimeMeter.cpp:49
#6 0xfaaf8888 in AL_OCIMoSession_Impl::send (this=0x963820,
name=0xf708ae20 "ospf lsdb show", arglist=0xf708ae30 "", ret=0xfd679b48, timeout=0)
at SessionManager_Impl.cpp:774
#7 0xfaaf7718 in AL_SessionManager_Impl::send (this=0x8bddb8, host=117901063,
name=0xf708ae20 "ospf lsdb show", arglist=0xf708ae30 "", ret=0xfd679b48, timeout=0)
at SessionManager_Impl.cpp:656
#8 0xf6e246e0 in AL::OSPFOCIDriver::getAllReachables (object=0x8aa0e0, args=0xfd67a4c8)
at OSPFOCIDriver.cpp:134
#9 0xfaad2b14 in AL_DriverManager_Impl::call (this=0x4f51e0, object=0x8aa0e0,
name=0xfc702d58 "getAllReachables", args=0xfd67a4c8) at Adapter_Impl.cpp:1447
#10 0xfaacd340 in AL_Mo_Impl::call (this=0x8aa0e0, name=0xfc702d58 "getAllReachables",
args=0xfd67a4c8) at Adapter_Impl.cpp:617
#11 0xfaac8c18 in AL::AbstractOCIDriver::dispatchCall (object=0x8bfcb8, args=0xfd67a4c8,
name=0xfc702d58 "getAllReachables", cid=18) at AbstractOCIDriver.cpp:158
#12 0xfaad2c08 in AL_DriverManager_Impl::call (this=0x4f51e0, object=0x8bfcb8,
name=0xfc702d58 "getAllReachables", args=0xfd67a4c8) at Adapter_Impl.cpp:1455
#13 0xfaacd340 in AL_Mo_Impl::call (this=0x8bfcb8, name=0xfc702d58 "getAllReachables",
args=0xfd67a4c8) at Adapter_Impl.cpp:617
#14 0xfb67ac44 in BL_BoNEManager_Impl::scan (this=0x291e28, listener=0x8978e0,
newbie=@0xfd67a880, reachable=@0xfd67a828, unreachable=@0xfd67a820, addNEID=@0xfd67a830)
at BoNE_Impl.cpp:4042
#15 0xf4e33fb8 in SFA_INEDataSyncModel_Impl::scan (this=0x897650)
at SfaNEDataSync_Impl.cpp:391
#16 0xf5f6c2f8 in POA_SFA::scan_INEDataSyncModel::execute (this=0xfd67ab38)
at SfaNEDataSyncS.cpp:561
#17 0xfe6f51f0 in TAO::Upcall_Wrapper::upcall (this=0xfd67ab37, server_request=@0xfd67afd8,
args=0xfd67ab44, nargs=1, command=@0xfd67ab38, servant_upcall=0xfd67aa48,
---Type <return> to continue, or q <return> to quit---q
exceptions=0x6dQuit
) at PortableServer/Upcall_Wrapper.cpp:78
#18 0xf5c5af24 in POA_SFA::INEDataSyncModel::scan_skel (server_request=@0xfd67afd8,
servant_upcall=0xfd67acc8, servant=0x897894) at SfaNEDataSyncS.cpp:610
#19 0xfe6f66e0 in TAO_ServantBase::synchronous_upcall_dispatch (this=0x897898,
req=@0xfd67afd8, servant_upcall=0xf5c5ae14, derived_this=0x897894)
at PortableServer/Servant_Base.cpp:230
#20 0xf5c5c294 in POA_SFA::INEDataSyncModel::_dispatch (this=0x897894, req=@0xfd67afd8,
servant_upcall=0xfd67acc8) at SfaNEDataSyncS.cpp:1509
#21 0xfe70fb04 in TAO_Object_Adapter::dispatch_servant (this=0x0, key=@0xfd67afd8,
req=@0xfd67afd8, forward_to=Cannot access memory at address 0x0
) at Servant_Upcall.inl:17
#22 0xfe710870 in TAO_Object_Adapter::dispatch (this=0x5f088, key=@0xfd67b044,
request=@0xfd67afd8, forward_to={ptr_ = @0xfd67afc8}) at Pseudo_VarOut_T.inl:131
#23 0xfe99e918 in TAO_Adapter_Registry::dispatch (this=0x62174, key=@0xfd67b044,

请注意#21出现this=0x0 ,ACE编译是否有多CPU选项?
...全文
232 点赞 收藏 9
写回复
9 条回复
darkstar21cn 2006年04月25日
你是不是用了它的单体模式?
单体模式有点问题,建议再使用单体前要显式的调用一下初始化代码。
回复 点赞
Bruceleexiaokan 2006年04月24日
你可能还是需要查一下TAO的文档,好像是哪里没有初始化的感觉。
即使不用该编译选项,本人在多CPU环境下的windows和aix平台上,基于ACE的应用运行得都没有问题。
回复 点赞
Bruceleexiaokan 2006年04月24日
你在用TAO实现Corba调用?ACE是有多CPU的编译选项的。由于在UNIX下编译ACE需要GNU make 3.8版以上的支持,具体你可以参考如下文档:

Makefile Flags
GNU make provides many options to customize its operation. See its documentation for more information. One example is that for multi-cpu UNIX machines you will be able to build faster if you use:

% make -j n

which allows parallel compilation. The number n should typically be the number of CPUs. It is likely that builds will be faster even on single-CPU UNIX machines with make -j 2.

回复 点赞
yuanchuang 2006年04月17日
不懂,帮顶……
回复 点赞
lisypro 2006年04月10日
ACE是做什么的
回复 点赞
jixingzhong 2006年04月07日
ACE ?

只能 UP 了!
回复 点赞
ydogg 2006年04月06日
我遇到过类似问题,但实在想不起原因了。依稀,似乎是和Service Configration的配置文件有关系。
回复 点赞
yishow 2006年04月03日
我也来mark一下,用ACE的人真少啊
回复 点赞
yuanchuang 2006年03月31日
一看题目就深奥
在一看题目

菜鸟只有自己mark和帮你up的的能力。
回复 点赞
发动态
发帖子
工具平台和程序库
创建于2007-09-28

8235

社区成员

2.7w+

社区内容

C/C++ 工具平台和程序库
社区公告
暂无公告