如何解释显示在控制台上的c++错误信息

How to interpret c++ error messages displayed on the console?

本文关键字:控制台 c++ 信息 错误 显示 何解释 解释      更新时间:2023-10-16

我是c++的新手,我对如何阅读和解释控制台显示的c++错误消息没有很好的理解。以下是当我在OpenCV中玩一些图像时的错误消息。我知道这应该是一个与Mat文件的索引和Mat矩阵数据结构的维度相关的错误。但是我想学习如何一点一点地读取错误信息。

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (un
signed)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1
]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) &
 ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file e:opencvbuildi
ncludeopencv2coremat.hpp, line 538

首先阅读断言。

通常是对输入或函数调用的测试,该函数传递了错误的、不寻常的和致命的内容。如果测试通过,程序就存在。如果测试失败,它会以一种残酷而明显的方式死亡,以确保错误被修复。

标准修改为:

  1. 使用调试器来确定断言的函数

  2. 阅读断言函数的文档,确保在调用断言函数之前传递正确的数据并进行正确的调用来配置系统。

继续分解

(dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1())

这是失败的布尔逻辑。它是特定于实现的。具体来说,这是一组5个测试,所有测试都必须通过,否则程序将终止。

dims <= 2 

Dims小于等于2

data

data不为零。可能是空指针测试。

(unsigned)i0 < (unsigned)size.p[0]

i0,不管它是什么,都小于size。P[0],不管它是什么

(unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels())

Number off channels小于其他的channel Number。

((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()

在我看来,某些东西的位深度必须是正确的。没有上下文,我无法确定。

其余

in cv::Mat::at, file e:opencvbuildincludeopencv2coremat.hpp, line 538

只是行号和发生断言的文件。