Как получить номер строки, имя метода и имя класса, когда происходит сбой, используя Цель C

Я разрабатываю приложение, в котором я должен отслеживать сбои. Существует ограничение, заключающееся в том, что я не могу использовать какой-либо сторонний источник, такой как фреймворк Twitter, для обработки аварийных журналов.

В настоящее время я могу узнать только причину сбоя. Я не могу получить точную точку сбоя.

Что я делаю:

В моем приложении делегатdidFinishLaunchingWithOptions Метод я сделал свой собственный обработчик исключений:

    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

uncaughtExceptionHandler ----

void uncaughtExceptionHandler(NSException *exception) {
    NSLog(@"CRASH: %@", exception);
    NSLog(@"callStackSymbols: %@", [exception callStackSymbols]);
    NSLog(@"callStackReturnAddresses: %@", [exception callStackReturnAddresses]);
    NSLog(@"reason: %@", [exception reason]);
    NSLog(@"name: %@", [exception name]);    
    NSLog(@"%s %d %s %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, __FUNCTION__);
// Internal error reporting
}

Я разбил свое приложение вviewDidLoad метод, использующий это:

   NSArray *myary;

   myary = [NSArray arrayWithObjects:@"sad", nil];

   NSString *str =  [myary objectAtIndex:22];

Вот моя трассировка стека.

Есть ли какой-то способ добиться того, чего я хочу?

Я пытался следовать этим решениям от SO, но они не дают мне никакого руководства:

Решение 1

Решение 2

 Teja Nandamuri23 июн. 2016 г., 20:04
вы получаете имя метода, так что вам нужен точный номер строки, верно?
 Ganesh Somani24 июн. 2016 г., 04:13
Я понимаю вашу озабоченность, когда вы говорите, что использование третьей стороны ограничено, поскольку вы не хотите, чтобы данные передавались им. Однако вы можете использовать трекер с открытым исходным кодом, какplcrashreporter.org или, может быть, окунуться в их код, чтобы проверить
 Teja Nandamuri23 июн. 2016 г., 20:46
да, похоже, что это невозможно, так как номер строки не включен в журнал аварий. Они получают только номер строки метода.
 Teja Nandamuri23 июн. 2016 г., 20:01
Ваш последний оператор NSLOg имеет имя класса вместе с именем метода, верно? Что еще тебе нужно ?
 Dalvik23 июн. 2016 г., 20:31
@TejaNandamuri Я хочу номер строки для[myary objectAtIndex:22]; это ... но номер строки, которую я получаю, это `NSLog (@"% s% d% s% s ",ФАЙЛ, ЛИНИЯ, PRETTY_FUNCTION, ФУНКЦИЯ); `
 Avi23 июн. 2016 г., 21:14
Такие службы, как Crashlytics, получают номер строки, анализируяdsym файлы, которые вы загружаете (обычно используя сценарий фазы сборки).dsym имеет отображение между кусками кода и файлом и номером строки, из которой они были скомпилированы.
 Dalvik23 июн. 2016 г., 20:03
@TejaNandamuri, это номер строки метода appDelegates..но я хочу вывести номер строки точки и имя метода

Ответы на вопрос(0)

Ваш ответ на вопрос