我遇到的问题是分析在我无法访问的linux机器上生成的故障转储。情况如下:
顺便说一句,该软件是用C ++编写的。
现在软件在我们无法重现的情况下崩溃,因此我们的用户通过电子邮件向我们发送核心文件。该计划如下所示:
这通常可以正常工作,除了一个问题。它只适用于调试发生在同一台机器上的剥离和已发布的二进制文件构建。在其他机器上,调试器似乎感到困惑,堆栈跟踪可能包含完全不相关的调用,这些调用没有任何意义。这是我们一直想知道的事情,现在没有结论。这也是我们可以轻松处理的情况。
但是在我的机器上发生了一些无意识的升级到新分发的情况,从我做的构建的目标渲染所有核心文件是无用的......
现在我正在寻找一种方法来(a)了解正在发生的事情,以及(b)一种交叉调试核心文件的方法,这些核心文件在机器上生成而无法进行远程访问,从而运行不同的Linux发行版。哦,(c)如果我们可能做了一些根本错误的事情?
答案 0 :(得分:0)
只有在同一台计算机上进行调试时才会起作用,剥离和释放的二进制文件都是在这个机器上构建的 (a)了解正在发生的事情
很明显,尽管你相信你有一个密封的构建环境,但你实际上并不是。如果你确实有一个完全密封的构建环境,那么在不同的机器上构建并不重要。
因此,您的第一步应该是找到并消除所有非密封的内容,直到您可以在构建版本的每台计算机上构建位相同的版本。
一旦你实现了这一点,它也应该解决你的(b)问题。
(c)如果我们可能做了一些根本错误的事情?
你认为从根本上做错的是你相信你的chroot是版本控制的,当它看起来显然不是。