与分布式对象崩溃

时间:2012-02-23 11:25:16

标签: objective-c macos cocoa ipc distributed-objects

我正在使用Distributed对象根据给定的内容在两个进程之间进行通信。 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

这可能是由于许多同时向mDNS响应者发出请求而引起的。该方法适用于较少数量的消息。谁能请帮忙???

1 个答案:

答案 0 :(得分:0)

考虑使用我在2016年创建的this example重新编写代码。也许这可以为您提供一些稳定性。另外,你在2012年发布了这个.OSX 10.5将会相当陈旧 - 我编写的大多数OSX应用程序现在只支持OSX 10.8。同时,在崩溃时,我最近学到的一点是,如果你正在使用C API并且没有正确分配内存,你可能会在代码中的错误位置出现奇怪的东西(用词不当)。例如,如果你正在使用像sprintf这样的函数和其他使用char的东西的* f函数。最近,我使用char *s;而不是char s[1000];,我的应用程序在IPC机制中崩溃,令我惊讶!我在线程消息上得到了BAD ACCESS。当我修复了char声明时,我的IPC突然开始正常工作而没有崩溃。去图!

如果这不能解决您的问题,那么您可能会看到插座被您正在建立的连接数量所淹没。为此,您可能需要重新思考如何构建解决方案并找到更好的连接策略。