0

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

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

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

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

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

4

2 回答 2

2

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

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

于 2012-10-09T12:36:34.037 回答
0

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

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

于 2012-10-09T12:19:08.943 回答