我在Ubuntu 14.04和GDB 7.7.1上使用Eclipse4.4.2。我正在尝试检查Eclipse调试器中一些C++标准库容器的内容。
到目前为止,我尝试过的是:按照这里指令运行以下命令
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
将其复制到/home/myusername/prettyprint中。
然后,我将这段文字复制到我的.gdbinit中:
python
import sys
sys.path.insert(0, '/home/myusername/prettyprint/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end当我运行gdb时,收到以下错误消息:
Traceback (most recent call last):
File "<string>", line 4, in <module>
File "/home/myusername/prettyprint/python/libstdcxx/v6/printers.py", line 1266, in register_libstdcxx_printers
gdb.printing.register_pretty_printer(obj, libstdcxx_printer)
File "/usr/myusername/gdb/python/gdb/printing.py", line 146, in register_pretty_printer
printer.name)
RuntimeError: pretty-printer already registered: libstdc++-v6我搜索了这方面的帮助,发现文件中的第二行(register_libstdcxx_printers (None))是不必要的,所以我删除了它。然后,当我运行gdb并键入:
info pretty-print
我得到了这个输出,表明后端安装正确:
global pretty-printers:
.*
bound
libstdc++-v6
__gnu_cxx::_Slist_iterator
__gnu_cxx::__7::_Slist_iterator
__gnu_cxx::__7::__normal_iterator
__gnu_cxx::__7::slist
__gnu_cxx::__normal_iterator
__gnu_cxx::slist
__gnu_debug::_Safe_iterator
std::_Deque_const_iterator
std::_Deque_iterator
std::_List_const_iterator
std::_List_iterator
std::_Rb_tree_const_iterator
std::_Rb_tree_iterator
std::__7::_Deque_const_iterator
std::__7::_Deque_iterator
std::__7::_List_const_iterator
std::__7::_List_iterator
std::__7::_Rb_tree_const_iterator
---Type <return> to continue, or q <return> to quit---
std::__7::_Rb_tree_iterator
std::__7::__cxx11::basic_string
std::__7::basic_string
std::__7::bitset
std::__7::deque
std::__7::forward_list
std::__7::list
std::__7::map
std::__7::multimap
std::__7::multiset
std::__7::priority_queue
std::__7::queue
std::__7::set
std::__7::shared_ptr
std::__7::stack
std::__7::tuple
std::__7::unique_ptr
std::__7::unordered_map
std::__7::unordered_multimap
std::__7::unordered_multiset
std::__7::unordered_set
std::__7::vector
[... many more lines of output omitted]为了更好地衡量,我在.gdbinit中添加了以下行
set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off因此,我打开Eclipse并开始调试我的应用程序,结果发现丑陋的打印仍然有效:

如何修复这个问题以使用GDB的漂亮打印;是否已安装了漂亮打印?
发布于 2015-09-06 00:24:51
屏幕截图中的值看起来像内存地址,这使我相信您正在检查指向STL类型实例的指针。AFAIK,漂亮的打印机不会自动取消引用指针,但是如果您使用添加一个监视表达式来判断指针,就会自动打印。
您使用的附加.gdbinit行不应该是必需的;以下是所需的全部步骤(对于EclipseMars.1):
/home/<user>/.gdbinit文件:
从libstdcxx.v6导入sys.path.insert(0,'/path/to/prettyprint/ python ')打印机导入register_libstdcxx_printers端.gdbinit文件。您可以验证GDB是否很漂亮,如下所示(一旦完成了前一个过程的前两个步骤):
test.cpp的文件中:
# int> (){ std::map first;first'a‘= 10;first'b’= 20;}https://stackoverflow.com/questions/29739409
复制相似问题