我试图在QtCreator的Locals and Expressions窗口中看到Eigen向量的内容:

我看到它是一个包含10个组件的向量:

但当我点击它打开时,我得到:

我试着用这个脚本来做这个伎俩.我将它与一个空的__init__.py文件一起保存到〜/ Scripts/Eigen文件夹中并创建了.gdbinit文件:
python
import sys
sys.path.insert(0, '/home/martin/Scripts/Eigen')
from printers import register_eigen_printers
register_eigen_printers (None)
end
Run Code Online (Sandbox Code Playgroud)
我重新启动了QtCreator,没有任何改变.我在QtCreator设置中检查了"在启动时读取.gdbinit"选项,但仍然没有.
令我担心的是,我知道在过去看到Eigen对象的工作没有我干涉一些脚本.
拜托,我做错了什么?
我在用:
gcc版本4.8.1
Ubuntu 13.10
gdb 7.6.1-ubuntu
Qt Creator 3.0.0
基于Qt 5.2.0
我正在编译使用这些标志:
g++ -c -pipe -gdwarf-4 -fvar-tracking-assignments -g
-Wall -W -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG
Run Code Online (Sandbox Code Playgroud)
编辑:
正如@ggael建议的那样,我试图直接运行gdb:
(gdb) run
Starting program: /home/martin/Projects/TestGrounds/test
Traceback (most recent call last):
File "/usr/lib/debug/usr/lib/i386-linux-gnu/libstdc++.so.6.0.18-gdb.py", line 59, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
Traceback (most recent call last):
File "/usr/lib/debug/usr/lib/i386-linux-gnu/libstdc++.so.6.0.18-gdb.py", line 59, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
Run Code Online (Sandbox Code Playgroud)
然后:
(gdb) print vec
Python Exception <class 'TypeError'> 'map' object is not subscriptable:
Python Exception <class 'TypeError'> 'map' object is not subscriptable:
$1 = {<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >> = {<Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >> = {<Eigen::DenseBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >> = {<Eigen::internal::special_scalar_op_base<Eigen::Matrix<double, -1, 1, 0, -1, 1>, double, double, false>> = {<Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>, 3>> = {<Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>, 1>> = {<Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>, 0>> = {<Eigen::EigenBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>},
m_storage = {m_data = 0x804e020, m_rows = 10}}, <No data fields>}
Run Code Online (Sandbox Code Playgroud)
拜托,你能解释一下这是什么意思吗?什么是libstdcxx?
问题可能出在调试器本身。我尝试了很多组合
.gdbinit这些都不重要。然后我尝试使用旧的GDB 7.4和全新的QtCreator 3.0.1全新安装Ubuntu 12.04,它成功了!我对gcc 4.6、gcc 4.7和gcc 4.8.1得到了相同的结果 。
然后我在Ubuntu 13.10上尝试了最新的GDB 7.7,它再次工作,而GDB 7.5、GDB 7.6则不起作用。
还有一件奇怪的事情,只有在QtCreator 3.0.1std::shared_ptr中才能正确查看。
std::multimap在任何配置中都打印得不太漂亮。
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <memory>
#include <eigen3/Eigen/Dense>
int main(int argc, char *argv[])
{
std::vector<int> vec(4, 3);
std::map<int, std::string> map = {{1,"one"},{2,"two"},{3,"three"}};
std::multimap<int, std::string> multi = {{1,"one"},{2,"two"},{3,"three"}};
Eigen::VectorXd vector = Eigen::VectorXd::Constant(3, 3.14);
std::shared_ptr<Eigen::VectorXd> pointer(new Eigen::VectorXd(vector));
std::cout << vector << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
