我有一个正在运行的 C++ 项目,当我在 IDE 中的调试器下运行它时,它发生了堆栈溢出。
Visual Studio 2008 已自行截断溢出线程的堆栈跟踪(好吧,如果我们要这样做,为什么还要检查溢出呢?)。
是否有一些查看选项或调试选项可以显示该线程调用的根源?
因此,从本质上讲,除了向我提供堆栈跟踪可能损坏的原因等(我是否应该禁用我的 AV 并同时运行 memtest86 ?)是否有人有关于 Visual Studio 2008 中堆栈跟踪截断的实际信息?
我有一个正在运行的 C++ 项目,当我在 IDE 中的调试器下运行它时,它发生了堆栈溢出。
Visual Studio 2008 已自行截断溢出线程的堆栈跟踪(好吧,如果我们要这样做,为什么还要检查溢出呢?)。
是否有一些查看选项或调试选项可以显示该线程调用的根源?
因此,从本质上讲,除了向我提供堆栈跟踪可能损坏的原因等(我是否应该禁用我的 AV 并同时运行 memtest86 ?)是否有人有关于 Visual Studio 2008 中堆栈跟踪截断的实际信息?
如果您想拥有一个大堆栈并避免由于一些简单的递归错误而导致堆栈溢出,请使用 TLS: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms686749(v=vs.85) .aspx。
在进程开始时分配一个槽,然后使用 TlsGetValue 和 TlsSetValue 增加槽的值,然后检查它是否超过,然后闯入调试器或在你所谓的错误函数中执行一些其他“暂停”。
它不适用于没有 hack 的 3rd 方代码,但它对我来说很好地解决了限制并且非常轻巧。
简单的解决方案是从一开始就使堆栈保持足够小,以便堆栈溢出更早发生。无论如何,您都不想要一兆字节的重复功能。