【发布时间】:2014-07-13 07:18:28
【问题描述】:
首先我要说的是,我在这里搜索了其他密切相关的问题,但并没有帮助解决我的问题。
设置:
- Win7 笔记本电脑,SSH/X11 到 CentOS 6.4 最终运行 Eclipse Kepler SR2 w/CDT 8.3
- GDB 7.2
- 无法访问 Internet 的托管公司服务器(所以没有
svn co...)
我是使用 Eclipse/CDT 的新手,但熟悉 GDB。当我尝试调试使用 STL 的应用程序时,在第一次出现 STL 对象时,我收到以下错误。在有很多很多 STL 对象的程序上,我会遇到很多错误,以至于无法单步执行。我这里有一个用于说明目的的小示例程序。
这是我的示例程序:
#include <iostream>
using namespace std;
int main() {
string sComplex;
sComplex = "!!!Hello World!!!";
cout << sComplex << endl; // prints !!!Hello World!!!
//cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
cout << "This is a new string that writes out a numeric..." << endl;
int i = 1000;
cout << "Value for integer 'i' is : '" << i << "'." << endl;
cout << " In HEX: '";
cout << std::hex << std::showbase << i;
cout << "'." <<endl;
return 0;
}
以下是在第一行打印出来的错误(STL 字符串实例化):
Traceback(最近一次调用最后一次): 文件“/usr/lib64/../share/gdb/python/libstdcxx/v6/printers.py”,第 558 行,在 to_string return self.val['_M_dataplus']['_M_p'].lazy_string (length = len) RuntimeError: 无法访问地址 0xffffffffffffffe8 处的内存
Traceback(最近一次调用最后一次): 文件“/usr/lib64/../share/gdb/python/libstdcxx/v6/printers.py”,第 558 行,在 to_string return self.val['_M_dataplus']['_M_p'].lazy_string (length = len) RuntimeError: 无法访问地址 0xffffffffffffffe8 处的内存
Traceback(最近一次调用最后一次): 文件“/usr/lib64/../share/gdb/python/libstdcxx/v6/printers.py”,第 558 行,在 to_string return self.val['_M_dataplus']['_M_p'].lazy_string (length = len) RuntimeError: 无法访问地址 0xffffffffffffffe8 处的内存
首先,请注意这个对象有 3 个单独的错误。我已经验证安装了 python 漂亮的打印模块,并且我尝试了限制 to_string 长度的建议,但无济于事。如果我跳过字符串实例化,一切正常,我可以看到变量的简单字符串值。鼠标悬停看起来也不错。当我直接在命令行上使用 gdb 调试同一个应用程序时,我没有看到任何此类错误和变量值打印 pretty。
(gdb) p sComplex
$1 = "!!!Hello World!!!"
(gdb) p sComplex.c_str()
$2 = 0x602028 "!!!Hello World!!!"
我已经用我的 .gdbinit 文件和 Eclipse 的 Window->Preferences->C/C++->Debug->GDB 设置尝试了各种建议,甚至禁用了漂亮的打印,但它仍然会发生。我不知道接下来要尝试什么。
【问题讨论】:
-
python 文件与您的 C++ 程序或 Eclipse 环境有什么关系?这里出了点问题
-
@jasal,GDB 7.0 包括通过 python 插件脚本对 C++ STL 结构的“漂亮打印”支持:[sourceware.org/gdb/wiki/STLSupport](STLSupport)。这在 GDB 中对我来说很好,但在我运行 Eclipse 时会出现问题。
标签: c++ stl eclipse-cdt centos6 pretty-print