【问题标题】:C Language: Segmentation fault with valgrindC 语言:valgrind 的分段错误
【发布时间】:2011-10-28 17:42:14
【问题描述】:

我刚开始使用 C 编程(接下来是“C The Hard Way”)- 每当我尝试运行 valgrind 时,我都会在终端中遇到分段错误马上

I've installed and reinstalled valgrind

这里有什么建议吗?

【问题讨论】:

  • 您是说您的示例程序在通过 valgrind 运行时出现段错误,还是 valgrind 本身出现段错误?
  • 在 valgrind 之外运行时是否会编程段错误?
  • 嗯,程序运行良好。只有当我 valgrind 时,我才会得到分段错误。如果我只输入 valgrind,它也会显示分段错误。

标签: c terminal valgrind


【解决方案1】:

Valgrind 不应该出现段错误 - 每个(甚至是有问题的)程序都应该运行并拦截问题。

如果即使像valgrind true 这样的无害命令也会出现段错误,我建议你为你的操作系统下载预编译的 valgrind 二进制文件,大概使用它的包管理器。有时会发生类似的编译问题(可能是编译器中的错误、源代码和编译器之间的不兼容、错误的库......)。如果您仍在学习,您可能不想深入研究。

如果 valgrind 仅报告程序中的段错误,请发布其消息。这意味着您的程序中有错误。

【讨论】:

  • valgrind true 也会发生这种情况。我应该删除对 valgrind 的所有引用(如果是,它们到底在哪里?)还是再次运行预编译包?
  • 尝试在您运行过sudo make install的目录中运行sudo make uninstall。如果这不起作用,请在/usr/local 下找到新创建的文件并将其删除(尝试find /usr/local -newer .)。除非您从源代码安装了其他东西,否则您可能可以删除 /usr/local 的全部内容。然后使用发行版的包管理器安装valgrind
  • 对此还有什么建议吗? Valgrind 对我来说只是立即因“分段错误(核心转储)”而崩溃。不过,仅在我的代码上,它在其他东西上也能正常工作,而且它是来自 Ubuntu 16.04 存储库的预编译版本(版本 valgrind-3.11.0)。对 valgrind 死后该怎么办有点茫然……我想我可以尝试一些其他版本之类的东西。
【解决方案2】:

哪个程序出错了,valgrind 本身还是您自己的程序?

如果它是您的程序,您可以在启用调试的情况下编译它(即在 Linux 上使用 gcc -g),然后在调试器中运行它(在 Linux 上使用 gdb)。

如果是valgrind 本身,由于你是新手,你很不幸,但你仍然可以用传统的方式调试你的程序(使用gdb)。使用gdbdocumented here

【讨论】:

  • 我忘了提醒你也可以使用 Boehm 的垃圾收集器来避免大量内存泄漏(使用 GC_MALLOC 代替 malloc 等)
  • 我可以通过终端运行 gdb - 是的,这里是新手。
  • 是的,gdb 可以在终端中运行。阅读它的文档,不要忘记在使用前用 -g 标志重新编译。
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 2020-10-20
  • 1970-01-01
相关资源
最近更新 更多