我有一个使用 GCC 4.3 在 Linux 上构建的 Objective-C 应用程序,没有使用特定框架(仅 GNU 运行时)。我正在使用 Objective-C 异常(通过“-fobjc-exceptions”编译器标志)。
现在我想在捕获到一些异常时打印出这种异常的堆栈跟踪。或者什么会让我更开心:将跟踪放在一个字符串或某种结构中,以便稍后评估或打印它。
怎样才能做到这一点?
我有一个使用 GCC 4.3 在 Linux 上构建的 Objective-C 应用程序,没有使用特定框架(仅 GNU 运行时)。我正在使用 Objective-C 异常(通过“-fobjc-exceptions”编译器标志)。
现在我想在捕获到一些异常时打印出这种异常的堆栈跟踪。或者什么会让我更开心:将跟踪放在一个字符串或某种结构中,以便稍后评估或打印它。
怎样才能做到这一点?
NSArray * stack = [NSThread callStackSymbols];
它可能会有所帮助。
由于没有更多的知识浮出水面,这是我自己发现的:
至少在 Linux 下,我可以使用 GNU 扩展backtrace
并backtrace_symbols
获取调用堆栈的地址和相应的符号。这有点帮助,但与 gdb 提供的信息相去甚远。既没有行号也没有参数值。
使用 glibc 扩展dladdr
,我可以获得类似的信息,但无法获得更多信息。
这仍然不是我正在寻找的东西,但没有人得到 so 条款 - 所以我会接受我自己的答案:(。