堆栈溢出,找不到位置

Getting a stack overflow, cannot find where

本文关键字:位置 找不到 栈溢出 堆栈      更新时间:2023-10-16

我想我知道发生堆栈溢出的函数(称之为function2)。但是,我在整个函数体周围添加了一个 try-catch 语句,在 catch 部分放置了一个中断,但是当堆栈溢出发生时,它不会在 catch 语句中暂停。但是,如果我转到调用函数 2() 的上一个函数(调用它 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
    }
}

编辑:函数2()中有一些东西导致了这种情况。该函数执行了很多字符处理,我尝试将所有内容移动到指针 - 但我仍然得到异常。

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

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

Stackoverflow 是在你进入function2()体时生成的 - 所以function2中的任何内容都不会被执行,包括try-catch块。

Stackoveflow 不像其他人那样是一个例外,你不能像其他人一样捕获它 - 这通常意味着你的内存模型刚刚损坏,然后你需要终止你的程序 - 在这种情况下没有太多事情要做。

有关捕获它们的详细信息,请参阅此参考:在递归C++函数中捕获"堆栈溢出"异常

你可以在函数 2 catch 块中使用抛出 e,然后你的异常将被发送到 function1(),你可以在函数 1 上捕获它。