我有一个使用Boost的uBLAS矩阵实现成功编译的程序。然而,使用gdb进行调试时出现了问题,因为我找不到在调试过程中查看矩阵内容的方法。当我尝试查看矩阵V的元素(它确实存在并且包含数据)时,我会得到以下信息:
(gdb) print V(1,1)
Invalid data type for function to be called.
有没有解决方法?
谢谢!
我有一个使用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
方法。
gdb
的一个不幸限制,但是一个合理的解决方法。谢谢。 - Richard