Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在获取堆栈溢出,找不到位置_C++_Visual Studio_Visual Studio 2012 - Fatal编程技术网

C++ 正在获取堆栈溢出,找不到位置

C++ 正在获取堆栈溢出,找不到位置,c++,visual-studio,visual-studio-2012,C++,Visual Studio,Visual Studio 2012,我想我知道stackoverflow发生的函数(称为function2)。但是,我在整个函数体中添加了一个try-catch语句,在catch部分中加了一个中断,但是当stackoverflow发生时,它不会在catch语句中暂停。但是,如果我转到调用function2()的上一个函数(称为function1),单步执行function2()调用会引发异常 我去了调试->异常,大多数事情都打勾了 我正在使用VS2012 我还有别的办法可以查吗?我基本上就是这样做的: void function1

我想我知道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()
正文时生成的-因此将永远不会执行
function2
中的任何内容,包括
try catch

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


有关捕获它们的更多信息,请参阅此参考资料:

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

无法用C++ catch语句捕获堆栈溢出。它需要使用非标准的_try/_\u关键字以外的其他关键字进行结构化异常处理。不清楚为什么无法使用调试器诊断此问题。请打开“调用堆栈”窗口。“那会告诉你的。”雷蒙德陈,那只会告诉我哪个函数?我希望在遍历代码时看到堆栈大小不断增大…一旦看到哪个函数导致问题,就可以在其上设置断点。您似乎重新提交了问题:是否需要启用设置以确保它确实引发异常?我去调试,然后C++异常,我勾选了“STD::异常”,但它仍然没有抛出(我从函数2()中跳过E,可以简单地使用抛出“堆栈溢出异常发生”;或者你可以使用投掷;你说插入“扔”不能在这个时候净化。“”在我的C++代码中?