使用valgrind运行时不会生成Core

时间:2018-06-15 18:22:22

标签: ubuntu-14.04 valgrind

我在我的ubuntu上使用valgrind(valgrind-3.10.1)来测试cpp应用程序。 我添加了一些导致应用程序崩溃并生成核心文件的代码,该文件工作正常。 但是当我用valgrind运行相同的应用程序时,它无法生成核心文件。

我尝试过但没有帮助的可能修复。

  1. 使用ulimit -a(无限制)验证核心文件大小
  2. 验证了kernel.core_pattern(kernel.core_pattern = | / usr / share / apport / apport%p%s%c%d%P)。
  3. 这个问题还有什么其他解释?

1 个答案:

答案 0 :(得分:1)

  

但是当我用valgrind运行相同的应用程序时,它无法生成核心文件。

Valgrind在"虚拟"上运行您的应用程序中央处理器。当它检测到应用程序执行通常会导致进程终止的未定义操作时,它会打印一条消息,并exit s。

如果ulimit -c允许,并且当前目录是可写的,Valgrind 生成vgcore.$pid,这是模拟的核心转储格式的内存转储应用程序。 是您要用GDB分析的核心文件。

导致核心转储的实际操作永远不会在真实CPU上执行,因此 Linux内核永远不会看到应用程序崩溃。

即使Valgrind确实执行了该操作并且生成了内核核心转储,该核心也将毫无用处,因为它将代表Valgrind本身的状态,而不是应用程序的状态。