16

我目前遇到一些奇怪的异常,这很可能是由于我在与 opencv 交互时做错了一些事情:

First-chance exception at 0x7580b9bc in xxx.exe: Microsoft C++ exception: cv::Exception at memory location 0x00c1c624..

我已经Thrown在菜单中启用了该字段Debug -> Exceptions,但是我真的不知道在我的代码中哪里抛出了异常。

我该如何调试呢?

编辑 堆栈帧如下所示(我的应用程序甚至不会出现在列表中!):

  • KernelBase.dll!7580b8bc()
  • [以下框架可能不正确或缺失]
  • KernelBase.dll!7580b8bc()
  • opencv_core242d.dll!54eb60cc()
4

3 回答 3

20

您可以将整个 main 包装在一个 try catch 块中,该块会打印出异常详细信息。如果开放的 CV API 可以抛出异常,您将需要考虑将它们作为设计的一部分进行处理:

try
{
  // ... Contents of your main
}
catch ( cv::Exception & e )
{
 cerr << e.msg << endl; // output exception message
}
于 2012-10-02T09:59:17.277 回答
5

OpenCV 有一个方便的函数叫做cv::setBreakOnError

如果在任何 opencv 调用之前将以下内容放入 main 中:

cv::setBreakOnError(true);

那么你的程序将崩溃,因为 OpenCV 将在正常抛出 cv::Exception 之前执行无效操作(取消引用空指针)。如果您在调试器中运行您的代码,它将在这个非法操作处停止,并且您可以在错误发生时看到包含所有代码和变量的整个调用堆栈。

于 2015-12-12T12:45:39.883 回答
1

我通过使用带有 WebCam 的 OpenCV 遇到了这个问题。在我的情况下,问题是程序正在尝试在 Cam 尚未初始化时读取图像。

我的错误代码:

 // open camera
capture.open(0);
while (1){
    //store image to matrix // here is the bug
    capture.read(cameraFeed);

解决方案

 // open camera
capture.open(0);
while (1){

     //this line makes the program wait for an image 
     while (!capture.read(cameraFeed));

    //store image to matrix 
    capture.read(cameraFeed);

(对不起我的英语)谢谢

于 2014-09-11T02:12:38.373 回答