在 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的主要内容,如果未能解决你的问题,请参考以下文章

未显示错误时调试 GDB 中断

通过指针在 gdb/Eclipse CDT 调试监视中显示真实对象层次结构

gdb 调试程序步骤

gdb调试程序函数名为问号,啥原因?

解决gdb 调试 core 文件函数名显示为问号的问题

gdb中一些常用的调试命令