GDB 无法显示升压 uBLAS 矩阵?

GDB Can't Display Boost uBLAS Matrix?

本文关键字:uBLAS 矩阵 显示 GDB      更新时间:2023-10-16

我有一个使用Boost的uBLAS矩阵实现成功编译的程序。遗憾的是,使用gdb进行调试是有问题的,因为在调试时我找不到查看矩阵内容的方法。当我试图看到矩阵V的一个元素(它确实存在并且充满了数据)时,我得到:

(gdb) print V(1,1)
Invalid data type for function to be called.

有办法绕过这个吗?

谢谢!

可以调用

V.operator()(1,1)

在gdb 中

这是因为GDB不支持调用重载的operator()。它试图将V作为一个函数调用,但它不是一个函数。您可以编写一个独立的函数,将矩阵传递给并调用操作符:

int get_element(matrix const &m,int i,int j) {
    return m(i,j);
}
(gdb) p get_element(V,1,1)
(int) $0 = 43.1

GDB应该能够调用

您也可以尝试手动检查V的表示,以便手动提取所需的值。不过,对于使用大量模板或元编程的类型来说,这可能会很困难。

如果您碰巧在LLDB支持的平台上工作,它支持调用运算符重载。

struct foo {
    int operator()(int i,int j) {
        return 10;
    }
};
(lldb) p f(1,1)
(int) $0 = 10

我在寻找这个问题的解决方案时发现了这个线程。所提出的解决方案运行良好。但是,您也可以使用ublas矩阵的at_element方法。