问个奇怪的栈溢出
非au3的,是VC++的,若版版觉得不合适,请拖进无意区,之所以想在这里问一下就是模糊记得这里好象有位C或C++的高手,但我不记得是那个了(不然就直接msg了),也不是很确定是在本论坛,因为平逛的论坛多了点,好了不说费话了,下面是问题
====================================================
windows下的C++程序(用VC),有dump、pdb、源码dump分析显示错误是stack overflow 但是从线程的调用栈来看远没有达到1M的栈空间啊(栈才用了9个页面啊,离默认的1M的栈空间<编译选项是1兆>),崩溃位置是系统函数,_chkstk+0x27下面的test那一行
sub eax, _PAGESIZE_ ; decrease by PAGESIZE
test dword ptr ,eax ; probe page.
jmp short cs10
当前栈信息
0:008> !teb
TEB at 7ffdb000
ExceptionList: 01a5f410
StackBase: 01a60000
StackLimit: 01a57000
eax=01a57000 esp=01a5fefc
看样子是到达栈底了,目前的栈才0x9000,9个页面而已,应该是到达栈底后栈扩展才对啊(最多应该是异常提示),为何会发生崩溃? 求高手解答
========================================= 当年刚毕业时学过C,已经忘得心中无C的境界了,也自学过C++,因为看不懂所以没有坚持学下去,现在真后悔浪费了很多光阴,亡羊补牢,悔之晚矣!现在记性差的一笔。 StackBase是栈最顶部,StackLimit是栈最底部,esp始终指向当前的栈顶。线程运行时esp始终大于等于StackLimit,且小于等于StackBase,当不在这个范围时,就会引发栈溢出的异常。异常发生时,StackBase=01a60000,StackLimit=01a57000,esp=01a5fefc,属于正常范围,不会引发栈溢出的异常。你确定是栈溢出?异常代码是多少?如果不是EXCEPTION_STACK_OVERFLOW(0xC00000FD),就不是栈溢出错误,是其他错误了。 回复 3# pusofalse
谢谢p版回复
关键是这个发生是几率性的,因为我自己的机子从来没发生过,而是客户机通过CrashReport模块上传到服务器的dump看到的上述信息。
现在我想是不是别的程序把内存占满了,而使_chkstk踩空于是commit一个新页时内测不够了而发生的异常。只能先这样安慰自己了,希望是这种情况,这样就不是程序本身的问题了,不然这种bug最难找了
页:
[1]