2012-03-01 3 views
0

일부 장치에서 iOS 응용 프로그램이 작동하지 않습니다. 이런 일이 발생했을 때 iTunes에 남아있는 나쁜 리뷰를 감안할 때 코드에서 같은 지점에서 충돌이 발생하는 것 같습니다.GCD를 사용할 때 일부 장치에서 충돌이 발생했습니다.

마지막으로 좋은 사람은 저에게 리뷰를 남기지 않고 실제로 연락을했고, TestFlight를 사용하여 디버그 버전의 앱을 설치하기까지했습니다. 충돌 보고서와

무장 내가 malloc을 어딘가에 깊은 발생하는 것을 볼 수 있습니다 줄 번호 부여,

2 libSystem.B.dylib 0x34683d6e _sigtramp + 42 
3 libSystem.B.dylib 0x3468c886 szone_malloc_should_clear + 2122 

그리고, 내가 백그라운드 작업을 시작하는 시점에서 일이 나타납니다

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
    UIImage *image = [self loadImage:path]; 
    dispatch_sync(dispatch_get_main_queue(), ^{ 

나는 충돌이 일어나고있는 3 줄 중 어느 것이 확실하지 않으므로 GCD 자체 호출, 블록 코드 시작 부분 또는 블록 자체에서 충돌이 발생하는지 확실하지 않습니다.

스택 추적은 위의 코드 조각을 포함하는 함수에서 끝나고 블록 자체에서는 보이지 않을 것입니다. 충돌이 비동기 블록에 있다면, 스택 트레이스는 여전히 부모 함수에 대한 호출 트리를 포함합니까? 현재 가정에서 그 블록 내에서 충돌에 대한 스택 추적 (블록 자체의 스레드에서 비동기 적으로 실행되는 블록 이후) 부모 함수를 호출을 포함하지 않을 것이라고, 그래서 그것은 GCD 충돌 호출 생각 .

TFLog를 사용하여 정확한 순간을 찾으려고했지만 로그가 전혀 기록되지 않았습니다. 내 개발 장치에서 로그를 볼 수있는 로그 호출을 알기 때문에 TestFlight 레코더에 로그가 표시되어 크래시가이 디버그 옵션을 교란시키는 것으로 보입니다.

마지막으로, TestFlight는이 사용자가 사용하는 iPhone 4의 iOS 버전 번호를 찾을 수 없습니다. 따라서이 장치가 Jailbroken 기기인지 궁금한 점이 있습니까? (나는 사용자에게 질문했다, 아직 대답 없음).

이것은 모두 ARC 코드이므로 메모리 관리 문제라는 것을 알게되면 매우 놀랍습니다. 또한 몇 가지 장치에 격리되어 있지만 이러한 장치는 매번 같은 시점에 충돌합니다.

누구나 통찰력이나 디버깅 제안을 제공 할 수 있습니까? (내가 장치를 혼란시키지 않았 으면).

감사합니다,

답변

0

나는이 무시 무시한 버그를 해결했습니다.

DISPATCH_QUEUE_PRIORITY_BACKGROUND은 5.0 이상에서만 사용할 수 있으며 이전 버전에서는 작동이 중단됩니다.

4.2.1을 실행하는 iPhone 3G에서이 앱을 실제로 테스트했지만 그 모델이 GCD를 지원하지 않기 때문에 특정 코드 경로가 실행되지 않는 것입니다 ....

관련 문제