mem*_*elf 10 c++ visual-studio-2010 visual-c++
我目前正遭受一些奇怪的异常,这些异常很可能是由于我在与opencv交互时做错了一些事情:
First-chance exception at 0x7580b9bc in xxx.exe: Microsoft C++ exception: cv::Exception at memory location 0x00c1c624..
我已经Thrown在Debug -> Exceptions菜单中启用了该字段,但是我真的无法弄清楚我的代码中抛出异常的位置.
我该怎么调试呢?
编辑 堆栈帧就像这样(我的应用程序甚至不会显示在列表中!):
Ben*_*enj 13
您可以将整个main包装在try catch块中,该块打印出异常详细信息.如果开放的CV API可以抛出异常,那么无论如何都需要考虑将它们作为设计的一部分来处理:
try
{
// ... Contents of your main
}
catch ( cv::Exception & e )
{
cerr << e.msg << endl; // output exception message
}
Run Code Online (Sandbox Code Playgroud)
OpenCV有一个名为cv :: setBreakOnError的方便函数
如果在任何opencv调用之前将以下内容放入main中:
cv::setBreakOnError(true);
Run Code Online (Sandbox Code Playgroud)
然后你的程序会崩溃,因为OpenCV会在它正常抛出cv :: Exception之前执行无效操作(取消引用空指针).如果在调试器中运行代码,它将在此非法操作时停止,并且您可以在发生错误时看到包含所有代码和变量的整个调用堆栈.