0

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

我去了 Debug -> Exceptions 并且大多数事情都被勾选了。

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

4

2 回答 2

1

Stackoverflow 是在您进入function2()正文时生成的 - 因此任何内容function2都不会被执行,包括try-catch块。

Stackoveflow 不像其他人一样是例外,您无法像其他人一样抓住它 - 这通常意味着您的内存模型刚刚损坏,然后您需要终止您的程序 - 在这种情况下没什么可做的。

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

于 2013-09-21T15:54:47.080 回答
0

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

于 2013-09-21T15:57:39.793 回答