c++ - 获取堆栈溢出,找不到位置

标签 c++ visual-studio visual-studio-2012

我想我知道发生 stackoverflow 的函数(称之为 function2)。但是,我在整个函数体周围添加了一个 try-catch 语句,在 catch 部分放置了一个中断,但是当发生 stackoverflow 时,它不会在 catch 语句中暂停。但是,如果我转到调用 function2() 的上一个函数(将其称为 function1),跨过 function2() 调用确实会引发异常。

我转到“调试”->“异常”,大部分内容都已勾选。

我正在使用 VS2012。

还有其他方法可以检查吗?这就是我本质上所做的:

void function1(){
    //Code does reach line below.
    function2();
    //Code never reaches here
}

void function2(){
    try{
        //All the logic for function2();
    }
    catch(exception& e){
        //I put a break point here but it never catches the break point
    }
}

编辑:function2() 中有一些东西导致了这个。该函数执行大量字符处理,我已尝试将所有内容移动到指针 - 但我仍然遇到异常。

如果我不能使用异常处理,在 VS2012 中调试此问题的最佳过程是什么?

EDIT2:如何在 Visual Studio 中查看堆栈大小/增长?

最佳答案

当您进入 function2() 主体时会生成 Stackoverflow - 因此 function2 中的任何内容都不会被执行,包括 try-catch block 。

Stackoveflow 不像其他人那样是个异常(exception),您不能像其他人一样捕获它 - 这通常意味着您的内存模型刚刚损坏,然后您需要终止您的程序 - 在这种情况下没什么可做的。

有关捕获它们的更多信息,请参阅此引用资料:Catching "Stack Overflow" exceptions in recursive C++ functions

关于c++ - 获取堆栈溢出,找不到位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934555/

相关文章:

c# - Microsoft Visual Studio - 无法在 SSIS 包中打开脚本任务

C++ - vector push_back() 在 fgets() 之后不工作

c++ - 异常(exception)情况下,我想在没有任何堆栈展开的情况下进行调试

c++ - 如何出现空输入的 AddressSanitizer 错误

c++ - Qt4.4如何获取用户设置路径

c++ - 是否有可能让 Visual Studio 2017 将 c++ 代码编译成 exe 以外的文件类型?

visual-studio - 是否有可视化代码编辑器功能可以列出当前页面的函数/方法?

c# - 在 Visual Studio 中安装 Directx 和 Direct3D

unit-testing - Visual Studio 2012 带有 Xunit 测试运行器扩展的混合模式程序集

间歇性找不到 C++ 头文件