【问题标题】:Segmentation fault after installation安装后分段错误
【发布时间】:2014-02-11 15:04:04
【问题描述】:

我知道有关于这个主题的问题日志,但是我找不到我的问题的答案。 我有一个在 linux-VM 上构建的程序,没有任何问题。我可以运行程序。 我已经为这个程序创建了一个安装文件。在这个安装结构中,我可以找到我的构建程序。在这个位置,一切运行都没有问题。

如果我在另一个 linux-VM 上安装我的程序,我会收到错误“Segmantation fault (core dumped)”。当我从将原始项目复制到以进行安装的临时文件夹中运行程序时,也会发生此错误。它包含与安装结构中第一个 VM 上相同的文件。

到目前为止,我发现的唯一答案是指针指向错误的内存和平的问题。但我不敢相信就是这样,因为我的程序在第一个 VM 上运行良好。谁能帮我从哪里开始寻找?

【问题讨论】:

  • 您应该从程序中的一些打印开始,以便找到失败的行。或者如果你知道怎么做就更好了:使用一些调试工具,比如 netbeans 提供的工具,逐行跟踪程序的执行。
  • 或者更好的是,编译一个调试版本并在调试器中运行。
  • 我继承了程序。它包含 5 个解决方案和 2000 多个文件。首先,在我有时间开始挖掘代码之前,我必须能够构建一个分发它。所以添加一些打印并不是那么容易。
  • 我做了一个调试版本并在调试器中运行它。这没有带来任何问题。
  • 看起来“运行良好”的东西等同于定义明确是错误的。 观察到的行为不应等同于定义行为。你不能假设后者是真实的,因为前者是真实的。程序崩溃的原因有很多,几乎所有原因都涉及调用对后者的违反。您需要调试该核心文件,至少是调用堆栈以了解事情的发展方向。走你的代码路径,你至少认为是通过视觉检查绊倒的。

标签: c++ linux memory


【解决方案1】:

尝试调试它或使用 strace:

strace ./nameOfYourBinary

(如果没有,sudo apt-get install strace)

这应该有助于找出您的程序出了什么问题。 也许程序失败的虚拟机没有足够的内存(或其他)来运行你的程序。 还要检查所有的 malloc,如果你的代码中有它们。

【讨论】:

  • 谢谢,我在失败的 VM 中使用了 strace,并将其与正常工作的 VM 中的 strace 进行了比较。现在我知道许可证文件有问题。
猜你喜欢
  • 2017-02-12
  • 2015-01-27
  • 2013-08-05
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多