Как напечатать трассировку стека исключений исключений 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];
Это может помочь.