2013-03-07 120 views
5

我有一个服务器写在C++崩溃在我没有直接访问的生产环境。崩溃产生一个巨大的核心转储〜34G,我不能在本地复制。我需要分析核心转储,但不知道如何复制它不能完成。我尝试在目标上运行gdbserver,但它并没有将核心文件作为参数,似乎只适用于从主机运行远程应用程序的调试。有没有办法做到这一点?gdb调试远程核心转储

+0

对于生成该大小转储的程序,您是否已经有一个日志记录机制来帮助您将问题缩小到应用程序的特定部分? – didierc 2013-03-07 16:51:52

+0

使用'ssh'登录到远程机器 - 如果你有'gdbserver'访问权限,我希望你可以做大部分事情。 – 2013-03-07 16:52:08

+0

我不能'ssh'到远程机器,但可以让系统管理员为我运行'gdbserver'之类的东西,但他无法分析和调试核心文件。我正在考虑一种更持久的解决方案,这种解决方案在将来发生时也会起作用。而且我们还没有实现适当的日志记录机制:( – user1444800 2013-03-07 16:59:39

回答

1

我需要分析核心转储,但不知道如何在不复制它的情况下完成它。

你不行。你需要把核心转储放到你可以运行GDB的地方。

我不能ssh到远程机器,但可以要求系统管理员为我运行类似gdbserver但他不能分析和调试核心文件。

你不需要sysadmin来分析任何东西。您只需要让他运行一系列GDB命令,并向您发送输出。例如。

where 
thread apply all where 
info registers 
disas 

......将让你的方式来理解这个问题,并会采取你的系统管理员不到5分钟。

我仍然需要解压缩才能在gdb上运行它,我不想在本地机器上运行它。

另外,与您的经理谈谈。您的开发设置是不合理。您必须能够分析本地的生产崩溃情况,这意味着您必须能够访问足够强大的机器。