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

我去了Debug-> Exception,大多数事情都打勾了。

我正在使用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()中有某种原因导致此。该函数进行了大量的char处理,并且我尝试将所有内容移至指针-但仍然出现异常。

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

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

最佳答案

输入function2()主体时会生成Stackoverflow-因此,function2中的任何内容都将不会执行,包括try-catch块。

Stackoveflow与其他人不同,您不能像其他人一样捕获它-通常这意味着您的内存模型刚刚损坏,然后您需要终止程序-在这种情况下,您无需执行任何操作。

有关获取它们的更多信息,请参见此参考:Catching "Stack Overflow" exceptions in recursive C++ functions

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

10-11 19:22