C 运行gdb时windows中的堆栈溢出

C 运行gdb时windows中的堆栈溢出,c,gdb,stack-overflow,C,Gdb,Stack Overflow,我想我在Windows上通过emacs中的gdb运行单元测试时遇到了堆栈溢出问题 我在linux上运行完全相同的单元测试,没有问题 我还意识到,我在这些单元测试中使用了一个基于堆栈的.ini文件解析器,内存效率极低,因此堆栈溢出似乎是合理的可能性 我注意到在Linux上通过的Windows上有一些单元测试失败。进一步的调查显示,for循环中的一个(基于堆栈的)计数器在for循环执行的随机点处将自身重置为零,并且for循环正在检查相同索引值的数组中的(基于堆栈的)值发生了变化 我注意到gdb似乎在

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

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

我还意识到,我在这些单元测试中使用了一个基于堆栈的.ini文件解析器,内存效率极低,因此堆栈溢出似乎是合理的可能性

我注意到在Linux上通过的Windows上有一些单元测试失败。进一步的调查显示,for循环中的一个(基于堆栈的)计数器在for循环执行的随机点处将自身重置为零,并且for循环正在检查相同索引值的数组中的(基于堆栈的)值发生了变化


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

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


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

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


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

是否有任何用户控制gdb分配的堆栈量,或者只是从cmd行运行exe?在emacs中使用mingw,这样应该可以工作-我会试试看。出于兴趣,您怎么能知道--stack参数的默认值是什么呢?我猜这就是gcc的RTFM。对于VisualStudio来说,初始限制是4KB,保留限制是1MB,如果我不得不猜测的话,gcc可能是类似的。哈哈,RTFM总是最后的选择——4KB对于MSVCRTFM来说似乎小得出奇,这当然意味着“阅读精美手册”。是的,4KB很小,这些限制对于默认进程堆也是一样的。在32位机器上,不,只有1MB。是的,我有机会增加它。