为什么堆栈结束为空?

问题描述:

我试图找出应用程序中的崩溃。崩溃发生在压力测试。在发生崩溃时,VIRT约为19 Gigs,RES为2.1 Gigs。这是为了提到该系统具有3G的物理内存和5G的交换空间。为什么堆栈结束为空?

在应用程序崩溃的情况下,即使加载了正确的符号,核心转储也不会在堆栈strace中给出任何符号。但我注意到一个奇怪的行为,调用堆栈的底部为空。

(gdb) bt 
#0 0x00002adaea9df74d in ??() 
#1 0x00002aacc94ff700 in ??() 
#2 0x00000000004f9023 in ??() 
#3 0x00002aae2b8054e0 in ??() 
#4 0x00002aae6d9420a0 in ??() 
#5 0x00002aacc94ff700 in ??() 
#6 0x0000000000486312 in ??() 
#7 0x00002aae2b8054e0 in ??() 
#8 0x00002aacc94ff700 in ??() 
#9 0x00002aacc94ff440 in ??() 
#10 0x00002aae6d9420a0 in ??() 
#11 0x0000000000000000 in ??() 

这可能是什么原因造成的?是否因为堆栈损坏?

+0

如果您用某些涉及的技术来标记您的问题可能会有帮助 - 例如,编程语言,操作系统等。 – 2012-08-01 07:17:56

+0

好的,我会做。 :)。但是当人们为相同类型的问题移除编程语言标记时,我有过去的历史。 – 2012-08-01 07:21:50

+2

@RituparnaKashyap他们会删除标签,如果他们没有意义。例如,你的程序是C++ **还是** C? – juanchopanza 2012-08-01 07:24:07

最有可能的选择是有些东西会抛出你的调用栈:这可以解释为什么你的调试器显示垃圾以及为什么你的应用程序崩溃。我建议尝试在valgrind下运行您的代码。

+0

我们使用低负载进行valgrind测试。一切安好。我们在重负荷下遇到这种情况,运行2-3天后也会发生这种情况。如果我们对valgrind进行相同的描述,那么需要很长时间才能获得测试用例。 – 2012-08-01 08:03:05

+0

无论如何,我们会尝试它。除此之外还有其他/ OS参数,我们可以监控。 – 2012-08-01 08:07:14

+0

您的编译器可能有加固/安全选项来保护堆栈,该堆栈应该会在调用堆栈的地方使应用程序出现段错误。这可以帮助你调试这个。 – 2012-08-01 08:32:37