在 GDB 调试器中显示 cv2 Mat
Posted
技术标签:
【中文标题】在 GDB 调试器中显示 cv2 Mat【英文标题】:Displaying cv2 Mat in the GDB debugger 【发布时间】:2018-08-21 07:14:31 【问题描述】:我正在为 GDB 中的 Python 调试一个用 C++ 编写的函数。该函数使用 OpenCV。是否可以在 GDB 调试器中显示 OpenCV Mat 的值?
对于 Mat yp,这只是我得到的:
(gdb) print(yp)
$48 = flags = 1124024325, dims = 2, rows = 1, cols = 100,
data = 0x7fff979c9530 "", refcount = 0x7fff979c96c0,
datastart = 0x7fff979c9530 "", dataend = 0x7fff979c96c0 "\001",
datalimit = 0x7fff979c96c0 "\001", allocator = 0x0, size =
p = 0x7fffffff9ab8, step = p = 0x7fffffff9b00, buf = 400, 4
(gdb) print(yp.at<float>(0,1))
Cannot evaluate function -- may be inlined
【问题讨论】:
看看ccv module和this 【参考方案1】:您可以使用以下命令将 yp.data 打印为 200 个浮点数的数组,注意 200 = rows * cols * dims:
(gdb) print *(float *)yp.data@200
这里我依赖于 cv::Mat 的数据成员是一个指向数据缓冲区的指针这一事实。假设默认步幅(步长)为 1,这应该适用于 OpenCV 2.x、3.x 和 4.x。
【讨论】:
【参考方案2】:如果您在 CLion 中使用 GDB,您可以使用 OpenCV Image Viewer 插件,该插件在调试时只需单击即可显示矩阵。
https://plugins.jetbrains.com/plugin/14371-opencv-image-viewer
【讨论】:
以上是关于在 GDB 调试器中显示 cv2 Mat的主要内容,如果未能解决你的问题,请参考以下文章