7
|
T Percival Daniel Gehriger · 技术社区 · 16 年前 |
![]() |
1
7
如果您使用的是带有BSD的系统
例如(
输出:
但是,它的优点是非常简单,不需要任何额外的库或程序。 |
![]() |
2
15
FYI 建议的解决方案(在信号处理程序中使用backtrace_符号)被危险地破坏。不要使用它—— 是的,backtrace和backtrace_符号将生成一个backtrace并将其转换为符号名,但是:
因此,示例中的代码是最糟糕的错误类型——看起来它在工作,但在生产中它确实会以意想不到的方式使您失败。 顺便问一下,有兴趣做对吗?检查 this 出来。 干杯, 吉拉德。 |
![]() |
3
4
下面是一个如何使用demangler获取更多信息的示例。如您所见,这个还将stacktrace记录到文件中。
|
![]() |
4
2
德雷克斯的解决方案可能是最好的,但无论如何,这里有一个替代方案: 最新的Linux内核版本允许您通过管道将核心转储发送到脚本或程序。您可以编写一个脚本来捕获核心转储文件,收集您需要的任何额外信息,然后将所有内容发回。 不过,这是一个全局设置,因此它适用于系统上任何崩溃的程序。它还需要根权限来设置。 它可以通过/proc/sys/kernel/core_模式文件进行配置。将其设置为类似于“/home/myuser/bin/my core handler script”。 Ubuntu人也使用这个功能。 |