2012-12-20 5 views
7

Występuje błąd SIGPIPE w moim projekcie Xcode. Ten błąd zaczął się pojawiać od tygodnia wcześniej. Jeśli skomentowałem tę metodę, zadzwoń: [self configureBump]; wszystko działa poprawnie. Zintegrowałem w moim projekcie BUMP API. Ten interfejs API działa do tygodnia wcześniej bez żadnych problemów. Nie jestem pewien co do przyczyny tego błędu. Czy ktoś mógłby mi pomóc rozwiązać ten błąd? Niektórzy z moich przyjaciół również zgłaszają ten błąd.Wyjątek SIGPIPE w projekcie iOS z interfejsem API BUMP Zintegrowany

Xcode Wersja: 4.5 iOS Wersja: iOS 6.0/iOS 5.0

proszę zobaczyć poniżej ślad stosu:

* thread #1: tid = 0x1c03, 0x95a887d2 libsystem_kernel.dylib`mach_msg_trap + 10, stop reason = signal SIGPIPE 
    frame #0: 0x95a887d2 libsystem_kernel.dylib`mach_msg_trap + 10 
    frame #1: 0x95a87cb0 libsystem_kernel.dylib`mach_msg + 68 
    frame #2: 0x029ef13a CoreFoundation`__CFRunLoopServiceMachPort + 186 
    frame #3: 0x02952580 CoreFoundation`__CFRunLoopRun + 1312 
    frame #4: 0x02951db4 CoreFoundation`CFRunLoopRunSpecific + 212 
    frame #5: 0x02951ccb CoreFoundation`CFRunLoopRunInMode + 123 
    frame #6: 0x03093879 GraphicsServices`GSEventRunModal + 207 
    frame #7: 0x0309393e GraphicsServices`GSEventRun + 114 
    frame #8: 0x017a0a9b UIKit`UIApplicationMain + 1175 
    frame #9: 0x00002dd7 iCard`main + 199 at main.m:17 
    frame #10: 0x00002185 iCard`start + 53 
+1

Kolejny buggy API ... Teraz widzicie: deweloperzy Dropbox nie mają pojęcia o funkcjach variadycznych i powodują uszkodzenie stosu, czy to lepiej? –

+0

'[self configureBump]' wygląda tak, jakby pochodziło prosto z ich przykładowej aplikacji. powinno być możliwe wykopanie nieco głębiej poprzez ustawienie punktów przerwania w debugerze Xcode lub poprzez ustawienie wywołań 'NSLog' w samej metodzie configureBump w celu dokładniejszego określenia, która z wywołań powoduje SIGPIPE. –

Odpowiedz

7

Istnieje możliwość, że SIGPIPE wyrzucane na Timeout gniazda lub bez/Utracono połączenie wewnątrz tej lib. Może nastąpić awaria serwera po ich stronie lub coś podobnego.

można obejść poprzez ignorowanie SIGPIPE z:

signal(SIGPIPE, SIG_IGN); 

lub

signal(SIGPIPE, SO_NOSIGPIPE); 

Sprawdź this link szczegóły.

Z drugiej strony, można debugować dalej, ustawiając funkcję obsługi ze

signal(SIGPIPE, yourHandlerFunc);

i sprawdzanie stanu gniazd/Ivars/etc w nim.