0

В спорадических случаях я получаю EXC_BAD_ACCESS (SIGSEV) в одном из методов платформы Apple Accelerator, vDSP_fft2d_zip. Отчет о сбое дал следующее для темы 10. Опять же, большую часть времени это работает как чемпион. Любые идеи о том, как найти причину и исправить ее?Как отладить EXC_BAD_ACCESS в коде Accelerator от Apple?

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x412f2740 
Triggered by Thread: 10 
. . . 

Thread 10 Crashed: 
0 libvDSP.dylib     0x2ddfcdb4 ___lldb_unnamed_function431$$libvDSP.dylib + 68 
1 libvDSP.dylib     0x2ddfab66 ___lldb_unnamed_function427$$libvDSP.dylib + 562 
2 libvDSP.dylib     0x2ddfa8ee vDSP_fft2d_zop + 434 
3 libvDSP.dylib     0x2ddfa732 vDSP_fft2d_zip + 18 
4 ASSIST for iPad     0x000ac32e -[Processor setupFilterForBubbleSizeMM:rectWidth:rectImageWidth:dataFilled:dataUnfilled:] (Processor.mm:813) 
5 ASSIST for iPad     0x000af4d2 -[Processor runConvolutionProcessOnImage:aveImage:] (Processor.mm:1835) 
6 ASSIST for iPad     0x000ac5f6 -[Processor processAnswers] (Processor.mm:869) 
7 ASSIST for iPad     0x000ae9cc -[Processor process] (Processor.mm:1644) 
8 ASSIST for iPad     0x000d7744 -[ReallTimeScanner processImage:] (ReallTimeScanner.mm:1046) 
9 Foundation      0x2f296c82 __NSThread__main__ + 1058 
10 libsystem_pthread.dylib   0x396b6c1a _pthread_body + 138 
11 libsystem_pthread.dylib   0x396b6b8a _pthread_start + 98 
12 libsystem_pthread.dylib   0x396b4c8c thread_start + 4 

Соответствующий код выглядит следующим образом:

#define FFT_SIZE 512 
#define FFT_POWER 9 

dataFilledIn->imagp=(float *) malloc(sizeof(float)*FFT_SIZE*FFT_SIZE); 
dataFilledIn->realp=(float *) malloc(sizeof(float)*FFT_SIZE*FFT_SIZE); 
dataUnfilledIn->imagp=(float *) malloc(sizeof(float)*FFT_SIZE*FFT_SIZE); 
dataUnfilledIn->realp=(float *) malloc(sizeof(float)*FFT_SIZE*FFT_SIZE); 

memset(dataFilledIn->imagp, 0, sizeof(float)*FFT_SIZE*FFT_SIZE); 
memset(dataFilledIn->realp, 0, sizeof(float)*FFT_SIZE*FFT_SIZE); 
memset(dataUnfilledIn->imagp, 0, sizeof(float)*FFT_SIZE*FFT_SIZE); 
memset(dataUnfilledIn->realp, 0, sizeof(float)*FFT_SIZE*FFT_SIZE); 


for(float y=0; y<FFT_SIZE; y+=0.25) 
{ 
    for(float x=0; x<FFT_SIZE; x+=0.25) 
    { 
     dataFilledIn->realp[(int)y*FFT_SIZE+(int)x] += 0.0625; 
     dataUnfilledIn->realp[(int)y*FFT_SIZE+(int)x] -= 0.0625; 
    } 
} 

vDSP_fft2d_zip(setup, dataFilledIn, 1, 0, FFT_POWER, FFT_POWER, kFFTDirection_Forward); 
+0

Поскольку это выглядит в коде Apple, это может быть случай, когда вы должны отправить запрос на техническую поддержку (TSI) для помощи непосредственно от Apple: https://developer.apple.com/support/technical/submit/ –

+0

Должен ли я иметь возможность воспроизвести ошибку, чтобы отправить TSI? Это очень спорадично. – Alyoshak

+0

Если у вас есть проект с данными, которые могут произойти сбой в течение определенного периода времени, вы должны быть в порядке. Он не должен вылетать каждый раз, но вы должны иметь возможность столкнуться, когда Apple проверяет проект. Apple призывает вас предоставить TSI для «если вы не можете исправить ошибку», но убедитесь, что вы читаете правила представления, чтобы максимально использовать время работы Apple Engineer. –

ответ

2

Отвечая на мой собственный вопрос здесь: Убедитесь, что самый первый параметр передается в (типа FFTSetup) в vDSP_fft2d_zip() правильно инициализирован, и вы должны использовать этот вызов

vDSP_destroy_fftsetup(setup); 

, чтобы очистить его. Я инициализация установки вара правильно, как этот

setup = vDSP_create_fftsetup(FFT_POWER, kFFTRadix2); 

и затем очистив его, но затем не инициализирует его снова перед последующими вызовами vDSP_fft2d_zip(). К сожалению, это редко приводило к сбою, из-за чего казалось, что частые вызовы vDSP_fft2d_zip (setup, ...) работали, когда они не были. Аварии были спорадическими, что вызывало серьезную проблему.

+0

Я должен отметить, что если вы многократно создаете и уничтожаете установки, вы Doing It Wrong ™. Создание настроек довольно дорого; вы хотите создать одну установку только один раз и повторно использовать ее для нескольких вызовов 'vDSP_fft2d_zip', прежде чем уничтожить ее. –

+0

Я создаю установку только один раз. – Alyoshak

+0

Хорошо, хорошо! Я проверяю только потому, что это распространенная ошибка =) –

0
+0

Дэнни, я посмотрю на них и посмотрю, проливают ли они свет. Ошибка, очевидно, в коде Apple, поэтому я скептически отношусь к тому, что дальнейшее знание отчетов о сбоях будет делать больше, чем продолжать указывать в этом направлении. Но может быть, я что-то делаю неправильно. – Alyoshak

+4

Дэнни, они даже не связаны с отчетами о сбоях. Я думаю, вы имели в виду что-то вроде этого Рэй Вендерлих: http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs – Alyoshak

Смежные вопросы