【问题标题】:GDB Can't Display Boost uBLAS Matrix?GDB 不能显示 Boost uBLAS 矩阵?
【发布时间】:2012-02-25 21:17:37
【问题描述】:

我有一个使用 Boost 的 uBLAS 矩阵实现成功编译的程序。唉,使用 gdb 进行调试被证明是有问题的,因为在调试时我无法查看矩阵的内容。当我尝试查看矩阵 V 的元素(确实存在并且充满数据)时,我得到:

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

有没有办法解决这个问题?

谢谢!

【问题讨论】:

    标签: c++ matrix gdb boost-ublas


    【解决方案1】:

    可以打电话

    V.operator()(1,1)
    

    在 gdb 中

    【讨论】:

      【解决方案2】:

      这是因为 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
      

      【讨论】:

      • 这对gdb 来说是一个不幸的限制,但却是一个合理的解决方法。谢谢。
      【解决方案3】:

      我在寻找这个问题的解决方案时发现了这个线程。建议的解决方案工作正常。但是,您也可以使用 ublas 矩阵的at_element 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多