分布式对象崩溃
Posted
技术标签:
【中文标题】分布式对象崩溃【英文标题】:Crash with Distributed Objects 【发布时间】:2012-02-23 11:25:15 【问题描述】:根据给定的内容,我正在使用分布式对象在 2 个进程之间进行通信。 here
每当我尝试在短时间内发送许多消息时,我都会观察到以下崩溃。它只发生在 MAC OS 10.5 上。它似乎在 10.6/10.7 上运行良好
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000001
Crashed Thread: 26
Thread 26 Crashed:
0 libSystem.B.dylib 0x9453d2ee ConnectionResponse + 100
1 libSystem.B.dylib 0x9453d114 DNSServiceProcessResult + 754
2 com.apple.CFNetwork 0x929566b1 _SocketCallBack_NetService(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 43
3 com.apple.CoreFoundation 0x92a5a6f0 __CFSocketDoCallback + 640
4 com.apple.CoreFoundation 0x92a5bd35 __CFSocketPerformV0 + 133
5 com.apple.CoreFoundation 0x92a513c5 CFRunLoopRunSpecific + 3141
6 com.apple.CoreFoundation 0x92a51aa8 CFRunLoopRunInMode + 88
7 com.apple.Foundation 0x9156c869 -[NSSocketPortNameServer portForName:host:nameServerPortNumber:] + 457
8 com.apple.Foundation 0x9156c4c8 -[NSSocketPortNameServer portForName:host:] + 56
9 com.apple.Foundation 0x91446a68 +[NSConnection connectionWithRegisteredName:host:usingNameServer:] + 56
10 ...yyyyyyyyyy.xxxxxxxx 0x00110bbe -[MessageSendingModule sendMessageInternal:] + 617
这可能是由于对 mDNSresponder 的许多同时请求引起的。该方法适用于较少数量的消息。谁能帮忙???
【问题讨论】:
【参考方案1】:考虑使用我在 2016 年在这里创建的 this example 重新编写代码。也许这可以为您提供一些稳定性。此外,您在 2012 年发布了此内容。OSX 10.5 将会相当陈旧——我正在编写的大多数 OSX 应用程序现在只支持 OSX 10.8。同时,在崩溃时,我最近了解到,如果您使用 C API 并且没有正确分配内存,您的代码中的错误位置可能会出现奇怪的东西(用词不当)。例如,如果您正在使用像 sprintf 和其他 *f C 函数这样的函数来处理字符。最近,我使用char *s;
而不是char s[1000];
,我的应用程序在IPC 机制中崩溃了,这让我大吃一惊!我在线程消息上获得了 BAD ACCESS。当我修复 char 声明时,我的 IPC 突然开始正常工作而没有崩溃。算了!
如果这不能解决您的问题,那么您可能会看到套接字被您正在建立的连接数量所淹没。为此,您可能需要重新考虑构建解决方案的方式,并找到一种连接频率较低的更好策略。
【讨论】:
以上是关于分布式对象崩溃的主要内容,如果未能解决你的问题,请参考以下文章