如何使用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)

StdVectorPrinterstd::vector关联。您可以覆盖StdVectorPrinter本身,也可以将std::vector与其他 pretty-print 关联。

09-12 18:45