【问题标题】:OpenCV VideoWriter throws runtime error on full disk despite catching尽管捕获,OpenCV VideoWriter 在全盘上引发运行时错误
【发布时间】:2018-02-14 13:26:12
【问题描述】:

我正在使用 OpenCV 2.4.9 和 Visual C++ 2017。我正在编写视频并出于测试目的尝试在完整磁盘上写入帧。

我做到了

try {
    video_writer << frame;
} catch (cv::Exception& ex) {
    // Handle exception 
} catch (std::exception &e){
    // Handle exception
} catch (const std::runtime_error& error) {
    // Handle runtime error
}

在一个完整的磁盘上,并希望能够捕获一个异常。但是,Microsoft Visual C++ Runtime Library 出现运行时错误,指出“此应用程序已请求运行时以不寻常的方式终止它。”

我该如何捕捉到这个?

【问题讨论】:

  • ... (除非这是个坏主意)。如果你调试,你会得到什么异常 - 或者它实际上是一个异常?可能不是。
  • 我相信 OpenCV 在这种情况下会使用 abort() 函数发送 sig_abrt。所以不,你不能捕捉到那个异常。
  • 谢谢你们!调试显示更具体的错误消息:“abort() 已被调用”。
  • 你找到它了。如果你想做一些特定的事情,你可以挂接到 abort 函数。但到那时你可能做不了什么。

标签: opencv c++11 visual-c++


【解决方案1】:

OpenCV 使用abort() 通知该问题。由于 abort 发送 SIGABRT 这不是 c++ 异常,而是 signal - 您无法在 try catch 块中捕获它。

另外SIGABRT 无论如何都会导致你的程序崩溃。您仍然可以挂钩并尝试进行一些清理,但这不会阻止程序终止。

我遇到的唯一可以让您解决 SIGABRT 的解决方案被描述为 HERE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多