首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发行版应用程序生成的内核转储分析

发行版应用程序生成的内核转储分析
EN

Stack Overflow用户
提问于 2014-12-15 23:58:17
回答 1查看 2.7K关注 0票数 3

这样的帖子中,我知道如何对调试版本应用程序生成的核心转储文件进行分析。对于核心转储文件,我还可以使用gdb工具和bt命令获得调用堆栈。

但当使用其他命令,如信息局部变量,列表,打印局部变量等,我发现他们什么也不显示!令我惊讶的是,这个核心转储文件与调试版本应用程序生成的文件一样大,大小为1.6G字节!

是否有更多的信息,包括调用堆栈?当核心转储生成时,是否可能看到关于上一次函数调用中的变量的其他细节?

EN

回答 1

Stack Overflow用户

发布于 2014-12-19 05:28:18

令我惊讶的是,这个核心转储文件与调试版本应用程序生成的文件一样大,大小为1.6G字节!

你不应该对此感到惊讶。核心转储包含应用程序内存的可修改段。使用debug info编译的应用程序将具有与不带调试信息的应用程序编译的应用程序完全相同的可修改内存,并且应该产生完全相同的核心转储(假设其他编译标志是相同的,并且应用程序从运行到运行都是可重复的)。

需要调试信息才能理解调试器中的内存转储。但是您也可以理解没有调试信息的内存转储,它只是更多的手工和乏味。

是否有更多的信息,包括调用堆栈?

你说你已经有电话堆栈了。

最佳实践是始终使用完整的调试信息构建应用程序。

代码语言:javascript
复制
gcc -O2 -g -c foo.cc -o foo.o
gcc -g foo.o bar.o ... -o app

然后保留生成的(大的)二进制以进行调试,但将该二进制的剥离变体发送给最终用户:

代码语言:javascript
复制
cp app app-stripped
strip -g app-stripped   # removes all debug info from app-stripped

现在,当您从应用程序剥离得到一个内核转储时,请使用完全调试的app来分析该核心。

或者,您可以使用单独的调试器文件,如文档化的这里

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27495354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档