得到堆栈溢出,找不到位置

时间:2013-09-21 15:49:32

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

我想我知道堆栈溢出发生的函数(称之为function2)。但是,我在整个函数体中添加了一个try-catch语句,在catch部分中放了一个中断但是当stackoverflow发生时它不会在catch语句中暂停。但是,如果我转到调用function2()的前一个函数(调用它为function1),则跳过function2()调用会抛出异常。

我去了Debug - >选择例外和大多数事情。

我正在使用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中看到堆栈大小/增长?

2 个答案:

答案 0 :(得分:1)

当您进入function2()正文时会生成Stackoverflow - 因此function2将不执行任何操作,包括try-catch阻止。

Stackoveflow不像其他人一样异常,你不能像其他人一样抓住它 - 它通常意味着你的内存模型被破坏了,然后你需要终止你的程序 - 在这种情况下没什么可做的。

有关捕获它们的详细信息,请参阅此参考:Catching "Stack Overflow" exceptions in recursive C++ functions

答案 1 :(得分:0)

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