我在我的ubuntu上使用valgrind(valgrind-3.10.1)来测试cpp应用程序。 我添加了一些导致应用程序崩溃并生成核心文件的代码,该文件工作正常。 但是当我用valgrind运行相同的应用程序时,它无法生成核心文件。
我尝试过但没有帮助的可能修复。
这个问题还有什么其他解释?
答案 0 :(得分:1)
但是当我用valgrind运行相同的应用程序时,它无法生成核心文件。
Valgrind在"虚拟"上运行您的应用程序中央处理器。当它检测到应用程序执行通常会导致进程终止的未定义操作时,它会打印一条消息,并exit
s。
如果ulimit -c
允许,并且当前目录是可写的,Valgrind 也生成vgcore.$pid
,这是模拟的核心转储格式的内存转储应用程序。 那是您要用GDB分析的核心文件。
导致核心转储的实际操作永远不会在真实CPU上执行,因此 Linux内核永远不会看到应用程序崩溃。
即使Valgrind确实执行了该操作并且生成了内核核心转储,该核心也将毫无用处,因为它将代表Valgrind本身的状态,而不是应用程序的状态。