如何使用https://github.com/gcc-mirror/gcc/blob/gcc-6_3_0-release/libstdc%2B%2B-v3/python/libstdcxx/v6/printers.py的StdVectorPrinter创建自己的输出样式?
即使用现有工具进行元素访问,但自行驱动输出。
例如。对于
#include <string>
#include <vector>
#include <iostream>
int main(int, char**)
{
std::vector<std::string> data = { "hello", "world", "all", "is", "fine" };
for ( auto && i : data) {
std::cout << i << std::endl;
}
return 0;
}
输出不得为
(gdb) p data
$2 = std::vector of length 5, capacity 5 = {"hello", "world", "all", "is", "fine"}
但
(gdb) p data
$2 = "hello|world|all|is|fine"
使用StdVectorPrinter(例如)的通用打印机的框架代码在哪里?
最佳答案
这可能取决于您的操作系统。在Ubuntu上:
$ dpkg -L libstdc++6:amd64 | grep '\.py'
/usr/share/gcc-8/python/libstdcxx/__init__.py
/usr/share/gcc-8/python/libstdcxx/v6/__init__.py
/usr/share/gcc-8/python/libstdcxx/v6/printers.py
/usr/share/gcc-8/python/libstdcxx/v6/xmethods.py
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py
printers.py
包含以下行: libstdcxx_printer.add_container('std::', 'vector', StdVectorPrinter)
将
StdVectorPrinter
与std::vector
关联。您可以覆盖StdVectorPrinter
本身,也可以将std::vector
与其他 pretty-print 关联。