Как напечатать трассировку стека исключений исключений Objective-C во время выполнения GNU и без GNUStep?

У меня есть приложение Objective-C на Linux с GCC 4.3 без какой-либо конкретной среды (только GNU-runtime). Я использую исключения Objective-C (через флаг компилятора -fobjc-exceptions).

Теперь я хочу напечатать трассировку стека такого исключения, когда я его поймал. Или что сделало бы меня еще счастливее: поместите трассировку в строку или какую-то структуру, чтобы оценить или напечатать ее позже.

Как это может быть достигнуто?

2 ответа

Решение

Поскольку знания больше не плавают, вот что я обнаружил сам:

По крайней мере, под Linux я могу использовать расширения GNU backtrace а также backtrace_symbols получить адреса стека вызовов и соответствующих символов. Это немного помогает, но далеко от информации, которую дает GDB. Здесь нет ни номеров строк, ни значений аргументов.

С расширением glibc dladdr Я могу получить подобную информацию, но не дальше.

Это все еще не совсем то, что я ищу, но никто не получил такой оговорки - так что я бы принял мой собственный ответ:(.

  NSArray * stack = [NSThread callStackSymbols];

Это может помочь.

Другие вопросы по тегам