运行gdb时窗口中的堆栈溢出

时间:2012-10-09 12:16:15

标签: c gdb stack-overflow

我认为在Windows上的emacs中通过gdb运行我的单元测试时遇到堆栈溢出问题。

我在linux上运行完全相同的单元测试没有问题

我也知道我在这些单元测试中使用了一个可怕的内存效率低的基于堆栈的.ini文件解析器,所以看起来堆栈溢出发生的合理可能性。

我注意到在Windows上通过Linux进行了一些单元测试。进一步调查显示for循环中的(基于堆栈的)计数器在for循环执行中的随机点处将自身重置为零,并且for循环正在检查的数组中的(基于堆栈的)值针对相同的索引值进行更改< / p>

我注意到gdb似乎在Windows下分配了自己的执行线程 - 有没有办法找出线程分配了多少堆栈空间?

2 个答案:

答案 0 :(得分:2)

Linux和Windows之间的区别之一是,在Windows上,必须在编译时设置堆栈大小(有两种大小,初始和预定义的保留限制)。不确定您使用的编译器的默认值是什么,但您可能尝试使用--stack参数(gcc)来增加它。

在Linux上,堆栈大小是动态的,通常由系统管理员设置。

答案 1 :(得分:0)

那么,或许Windows对每个进程的最大堆栈数量的限制比Linux更严格?

This page 详细说明了如何在Windows中调试堆栈溢出。它不是基于gdb,但也许你仍然可以推断出一些东西。