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
この問題の解決策を探しているときに、このスレッドを見つけました。提案されたソリューションは正常に機能します。ただし、at_element
ublas行列の方法を使用することもできます。